TEMP_FAILURE_RETRY y __USE_GNU

Estoy en Ubuntu 10.04 usando GCC y quiero usar la macro TEMP_FAILURE_RETRY como se describe aquí:

http://www.gnu.org/s/hello/manual/libc/Interrupted-Primitives.html

Sin embargo, cuando compilo obtuve el siguiente error:

undefined reference to `TEMP_FAILURE_RETRY' 

Busqué en unistd.h donde está definida la macro y está precedida por:

 #ifdef __USE_GNU 

¿Cómo consigo mi código para comstackr y usar esta macro? ¿Puedo simplemente envolverlo usando el mismo #ifdef __USE_GNU en mi código?

__USE_GNU es una macro interna, por lo que no debería definirla usted mismo.

Pero puede definir _GNU_SOURCE , ya sea en su código, o al comstackr (usando la opción -D ).

Creo que la definición de este ayudará a que TEMP_FAILURE_RETRY esté disponible.

El uso de _GNU_SOURCE puede tener implicaciones para la portabilidad del código, trae muchas otras cosas además de TEMP_FAILURE_RETRY . Si solo necesita la funcionalidad de TEMP_FAILURE_RETRY , también puede definir una macro similar, aquí hay una versión estándar de C que no usa ninguna extensión de GNU:

 #define CALL_RETRY(retvar, expression) do { \ retvar = (expression); \ } while (retvar == -1 && errno == EINTR); 

donde en retvar pasa el nombre de una variable donde desea que se almacene el valor de retorno.