sigevent — structure for notification from asynchronous routines
| union | sigval { | 
                  
                  /* Data passed with notification */
                 | ||
| int | sival_int; | 
                  /* Integer value */
                 | ||
| void | * | sival_ptr; | 
                  /* Pointer value */
                 | |
| }; | ||||
| struct | sigevent { | |||
| int | sigev_notify; | 
                  /* Notification method */
                 | ||
| int | sigev_signo; | 
                  /* Notification signal */
                 | ||
| union sigval | sigev_value; | 
                  /* Data passed with notification */ | ||
| void | (* | sigev_notify_function)(union sigval); | 
                  
                  /* Function used for thread notification (SIGEV_THREAD) */ | |
| void | * | sigev_notify_attributes; | 
                  
                  /* Attributes for notification thread (SIGEV_THREAD) */ | |
| pid_t | sigev_notify_thread_id; | 
                  
                  /* ID of thread to signal (SIGEV_THREAD_ID) */
                 | ||
| }; | ||||
The sigevent structure is
      used by various APIs to describe the way a process is to be
      notified about an event (e.g., completion of an asynchronous
      request, expiration of a timer, or the arrival of a
      message).
The definition shown in the SYNOPSIS is approximate: some
      of the fields in the sigevent
      structure may be defined as part of a union. Programs should
      only employ those fields relevant to the value specified in
      sigev_notify.
The sigev_notify
      field specifies how notification is to be performed. This
      field can have one of the following values:
SIGEV_NONEA "null" notification: don't do anything when the event occurs.
SIGEV_SIGNALNotify the process by sending the signal specified
            in sigev_signo.
If the signal is caught with a signal handler that
            was registered using the sigaction(2)
            SA_SIGINFO flag, then the
            following fields are set in the siginfo_t structure that is passed
            as the second argument of the handler:
si_code
This field is set to a value that depends on the API delivering the notification.
si_signo
This field is set to the signal number (i.e., the same value as in
sigev_signo).
si_value
This field is set to the value specified in
sigev_value.
Depending on the API, other fields may also be set
            in the siginfo_t
            structure.
The same information is also available if the signal is accepted using sigwaitinfo(2).
SIGEV_THREADNotify the process by invoking sigev_notify_function "as
            if" it were the start function of a new thread. (Among
            the implementation possibilities here are that each
            timer notification could result in the creation of a
            new thread, or that a single thread is created to
            receive all notifications.) The function is invoked
            with sigev_value as its sole
            argument. If sigev_notify_attributes
            is not NULL, it should point to a pthread_attr_t structure that
            defines attributes for the new thread (see pthread_attr_init(3)).
SIGEV_THREAD_ID
          (Linux-specific)Currently used only by POSIX timers; see timer_create(2).
timer_create(2), aio_fsync(3), aio_read(3), aio_write(3), getaddrinfo_a(3), lio_listio(3), mq_notify(3), aio(7), pthreads(7)
This page is part of release 3.33 of the Linux man-pages project. A
      description of the project, and information about reporting
      bugs, can be found at http://man7.org/linux/man-pages/.
| Copyright (C) 2006, 2010 Michael Kerrisk <mtk.manpagesgmail.com> Copyright (C) 2009 Petr Baudis <paskysuse.cz> Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. |