TEMP_FAILURE_RETRY et __USE_GNU

Je suis sur Ubuntu 10.04 en utilisant GCC et je veux utiliser la macro TEMP_FAILURE_RETRY comme décrit ici:

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

Cependant, lorsque je comstack, j’ai l’erreur suivante:

undefined reference to `TEMP_FAILURE_RETRY' 

J’ai cherché dans unistd.h où la macro est définie et précédée de:

 #ifdef __USE_GNU 

Comment puis-je obtenir mon code pour comstackr et utiliser cette macro? Puis-je simplement l’envelopper en utilisant le même #ifdef __USE_GNU dans mon code?

__USE_GNU est une macro interne, vous ne devez donc pas la définir vous-même.

Mais vous pouvez définir _GNU_SOURCE , soit dans votre code, soit lors de la compilation (en utilisant l’option -D ).

Je pense que définir celui-ci aidera à rendre TEMP_FAILURE_RETRY disponible.

L’utilisation de _GNU_SOURCE peut avoir des implications sur la portabilité du code, elle TEMP_FAILURE_RETRY beaucoup d’autres éléments en plus de TEMP_FAILURE_RETRY . Si vous avez uniquement besoin des fonctionnalités de TEMP_FAILURE_RETRY , vous pouvez également définir vous-même une macro similaire. Voici une version C standard qui n’utilise aucune extension GNU:

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

Où dans retvar vous passez le nom d’une variable où vous voulez que la valeur de retour soit stockée.