sigevents
We've defined struct __sigevent32 and struct __sigevent64, in addition to struct sigevent. The OS handles either form in both 32- and 64-bit architectures.
Since a sigevent might be passed between 32- and 64-bit programs, we've defined a SIGEV_64BIT flag that indicates which type of sigevent it is. We OR this flag into the sigev_notify types. For example, in addition to SIGEV_SIGNAL, we have SIGEV_SIGNAL32 and SIGEV_SIGNAL64:
- SIGEV_SIGNAL32 is the same value as SIGEV_SIGNAL was in earlier versions of the OS.
- SIGEV_SIGNAL64 is equal to SIGEV_SIGNAL32 with SIGEV_64BIT ORed in.
- In a 32-bit process, SIGEV_SIGNAL is equal to SIGEV_SIGNAL32; in a 64-bit process, it's equal to SIGEV_SIGNAL64.
Some programs use SIGEV_NONE to identify an empty sigevent. For compatibility, SIGEV_NONE is always the same as SIGEV_NONE32, no matter which architecture you compile for.
If your program stores sigevents from 32- and 64-bit programs, you should replace struct sigevent with a union:
union {
struct sigevent ev;
struct __sigevent32 ev32;
struct __sigevent64 ev64;
};
Your code can then check ev.sigev_notify, determine whether the sigevent is from a 32- or 64-bit program, and then use the ev32 or ev64 structure, as appropriate.
For more information, see the entry for
sigevent
in the C Library Reference.
See also
Kernel calls and macros for sigvals
in this chapter.
