Le type `stack_t` n’est-il plus défini sur linux?

La plate-forme Linux est Ubuntu 12.04

J’ai les en-têtes suivants inclus dans mon code source:

#include  #include  #include  ... 

Quand je le comstack cependant, il se plaint /usr/include/x86_64-linux-gnu/sys/ucontext.h:139:5: error: unknown type name 'stack_t'

J’ai googlé et trouvé que stack_t devrait être défini dans signal.h , mais ici il ne semble pas être défini?

Ceci est censé être un commentaire mais je ne peux pas le rendre lisible là-bas. Pardon.

Avez-vous #define un des éléments suivants:

  _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L 

Selon SUS v2 (1997), stack_t devrait être défini dans http://pubs.opengroup.org/onlinepubs/7908799/xsh/ucontext.h.html.

Les types sigset_t et stack_t sont définis comme dans.

http://pubs.opengroup.org/onlinepubs/007908799/xsh/signal.h.html

L’en-tête définit le type stack_t en tant que structure comprenant au moins les membres suivants:

 void *ss_sp stack base or pointer size_t ss_size stack size int ss_flags flags 

Le type est également listé dans la documentation de glibc: http://www.gnu.org/software/libc/manual/html_node/Signal-Stack.html

Type de données: stack_t

Ce type est utilisé dans la fonction sigaltstack , décrite comme sigaltstack :

sigaltstack est l’interface la plus récente et provient de 4.4 BSD. …

Et la page de sigaltstack officielle Linux de sigaltstack (version 2015-07-23) indique: http://man7.org/linux/man-pages/man2/sigaltstack.2.html

Exigences de macros de test de fonctionnalités pour la glibc (voir feature_test_macros (7) ):

  sigaltstack(): _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L 

CONFORME AUX POSIX.1-2001, POSIX.1-2009, SUSv2, SVr4.

Ainsi, lorsque vous utilisez une glibc plus récente que la 2.12, vous devez définir certaines macros pour pouvoir utiliser sigaltstack et stack_t . Depuis la glibc 2.10, vous pouvez simplement définir #define _GNU_SOURCE pour activer _BSD_SOURCE et _POSIX_C_SOURCE = 200809L