TEMP_FAILURE_RETRY和__USE_GNU
我使用GCC在Ubuntu 10.04上,我想使用宏TEMP_FAILURE_RETRY,如下所述:
http://www.gnu.org/s/hello/manual/libc/Interrupted-Primitives.html
但是,当我编译时,我收到以下错误:
undefined reference to `TEMP_FAILURE_RETRY'
我查看了unistd.h,其中定义了宏,并且前面是:
#ifdef __USE_GNU
如何获取编译和使用此宏的代码? 我可以在代码中使用相同的#ifdef __USE_GNU将其包装起来吗?
__USE_GNU
是一个内部宏,因此您不应自己定义它。
但是您可以在代码中或编译时使用_GNU_SOURCE
(使用-D
选项)。
我认为定义这个将有助于使TEMP_FAILURE_RETRY
可用。
使用_GNU_SOURCE
可能会对代码的可移植性产生影响,除了TEMP_FAILURE_RETRY
之外TEMP_FAILURE_RETRY
很多其他东西。 如果你只需要TEMP_FAILURE_RETRY
的function,你也可以自己定义类似的宏,这里是一个不使用任何GNU扩展的标准C版本:
#define CALL_RETRY(retvar, expression) do { \ retvar = (expression); \ } while (retvar == -1 && errno == EINTR);
在retvar
您传递要存储返回值的变量的名称。