Provided by: manpages-es_1.55-10_all bug

NOMBRE

       sigaltstack - definir y/u obtener el contexto de la pila de senales

SINOPSIS

       #include <signal.h>

       int sigaltstack(const stack_t *ss, stack_t *oss);

DESCRIPCI'ON

       sigaltstack  permite a un proceso definir una nueva pila alternativa de
       senales y/o recuperar el estado de  una  pila  alternativa  de  senales
       existente.  Una pila alternativa de senales se usa durante la ejecucion
       de un manejador de senales si el establecimiento de ese manejador  (ver
       sigaction(2)) lo solicita.

       La  secuencia  normal  de  eventos  para  usar  una pila alternativa de
       senales es la siguiente:

       1.     Reservar un area de memoria  para  ser  utilizada  por  la  pila
              alternativa de senales.

       2.     Utilizar sigaltstack para informar al sistema de la existencia y
              la localizacion de la pila alternativa de senales.

       3.     Cuando se establece un manejador de  senales  usando  sigaction,
              informar  al  sistema de que el manejador de senales deberia ser
              ejecutado en la pila alternativa de  senales,  especificando  la
              bandera SA_ONSTACK.

       El  argumento  ss se usa para especificar una nueva pila alternativa de
       senales,  mientras  que  el  argumento  oss  se  usa   para   recuperar
       informacion   sobre   la   pila   alternativa  de  senales  establecida
       actualmente.  Si estamos interesados en  realizar  solo  una  de  estas
       tareas,  entonces  el  otro  argumento  se puede especificar como NULL.
       Cada uno de estos argumentos es una estructura del tipo siguiente:

              typedef struct {
                  void  *ss_sp;     /* Direccion de la base de la pila */
                  int    ss_flags;  /* Banderas */
                  size_t ss_size;   /* Numero de bytes en la pila */
              } stack_t;

       Para establecer una nueva pila alternativa de senales,  ss.ss_flags  se
       inicializa  a  cero,  ss.ss_sp y ss.ss_size especifican la direccion de
       comienzo y el tamano de la pila.  La constante SIGSTKSZ se define  para
       ser  suficientemente  grande  para  cubrir  el  requerimiento de tamano
       habitual en una pila alternativa de senales, y la constante MINSIGSTKSZ
       define  el  tamano  minimo  requerido  para  ejecutar  un  manejador de
       senales.

       Para deshabilitar una pila existente, se  especifica  ss.ss_flags  como
       SS_DISABLE. En este caso, los campos restantes en ss se ignoran.

       Si  oss no es NULL, entonces se utiliza para devolver informacion sobre
       la pila alternativa de senales que estaba en uso antes de la llamada  a
       sigaltstack.   Los campos oss.ss_sp y oss.ss_sizedevuelven la direcci'on
       de comienzo y el tama~no de esa pila.  El  oss.ss_flags  puede  devolver
       cualquiera de los siguientes valores:

       SS_ONSTACK
              El  proceso esta actualmente ejecutandose en la pila alternativa
              de  senales.  (Notese  que  no  es  posible  cambiar   la   pila
              alternativa de senales si el proceso esta ejecutandose en ella.)

       SS_DISABLE
              La pila alternativa de senales esta actualmente deshabilitada.

VALOR DEVUELTO

       sigaltstack  devuelve  0  en  caso de exito, o -1 en caso de error, con
       errno definido para indicar el error.

ERRORES

       ENOMEM El tamano especificado para la nueva pila alternativa de senales
              (ss.ss_size) era menor que MINSTKSZ.

       EFAULT Ya  sea ss o oss no es NULL y apunta a un area fuera del espacio
              de direcciones del proceso.

       EPERM  Hubo un intento  de  cambiar  la  pila  alternativa  de  senales
              mientras  estaba activa (p.e.: el proceso ya estaba ejecutandose
              en la pila alternativa de senales actual).

       EINVAL ss no es NULL y el campo ss_flags contiene un valor distinto  de
              cero y de SS_DISABLE.

OBSERVACIONES

       El codigo siguiente muestra el uso de sigaltstack:

              stack_t ss;

              ss.ss_sp = malloc(SIGSTKSZ);
              if (ss.ss_sp == NULL)
                  /* Manejar error */;
              ss.ss_size = SIGSTKSZ;
              ss.ss_flags = 0;
              if (sigaltstack(&ss, NULL) == -1)
                  /* Manejar error */;

       Establecer una pila alternativa de senales es util si un proceso espera
       agotar su pila estandar.  Esto puede ocurrir, por  ejemplo,  porque  la
       pila  crezca  tanto  que se encuentre con el monticulo, que crece hacia
       arriba,  o  que  alcance  un  limite  establecido  por  una  llamada  a
       setrlimit(RLIMIT_STACK,  &rlim).   Si  la  pila  estandar  se agota, el
       nucleo envia al proceso una senal SIGSEGV.  En estas circunstancias, la
       unica  manera  de  capturar  esta  senal  es en una pila alternativa de
       senales.

       En la mayoria de las  arquitecturas  aceptadas  por  Linux,  las  pilas
       crecen  hacia  abajo. sigaltstack reconoce automaticamente la direccion
       de crecimiento.

       Las funciones llamadas desde un manejador de senales que se ejecute  en
       una  pila  alternativa de senales tambien usaran la pila alternativa de
       senales.   (Esto  tambien  es  aplicable  a  cualesquiera   manejadores
       invocados  para otras senales mientras el proceso se esta ejecutando en
       la pila alternativa  de  senales.)   De  manera  diferente  a  la  pila
       estandar, el sistema no extiende automaticamente la pila alternativa de
       senales.  Exceder el tamano reservado de la pila alternativa de senales
       conlleva resultados impredecibles.

       Una  llamada  exitosa  a  execve  elimina cualquier pila alternativa de
       senales existente.

       sigaltstack  sustituye  la   antigua   llamada   sigstack.    Para   la
       compatibilidad  hacia  atras, glibc tambien ofrece sigstack.  Todas las
       aplicaciones nuevas deberian ser usadas usando sigaltstack.

HISTORIA

       BSD 4.2 tenia una llamada al sistema sigstack(). Usaba  una  estructura
       ligeramente  diferente, y como una desventaja mayor, el invocador debia
       saber la direccion de crecimiento de la pila.

CONFORME A

       SUSv2, SVr4, POSIX 1003.1-2001.

V'EASE TAMBI'EN

       sigaction(2),  setrlimit(2),  execve(2),  sigsetjmp(3),  siglongjmp(3),
       signal(7)

       Traduccion   realizada  por  Jorge  Rodriguez  Garcia  (A.K.A.  Tiriel)
       <tiriel@users.sourceforge.net>