Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


siginfo.h
001: /* siginfo_t, sigevent and constants.  Linux version.
002:    Copyright (C) 1997-2002, 2003, 2011 Free Software Foundation, Inc.
003:    This file is part of the GNU C Library.
004: 
005:    The GNU C Library is free software; you can redistribute it and/or
006:    modify it under the terms of the GNU Lesser General Public
007:    License as published by the Free Software Foundation; either
008:    version 2.1 of the License, or (at your option) any later version.
009: 
010:    The GNU C Library is distributed in the hope that it will be useful,
011:    but WITHOUT ANY WARRANTY; without even the implied warranty of
012:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013:    Lesser General Public License for more details.
014: 
015:    You should have received a copy of the GNU Lesser General Public
016:    License along with the GNU C Library; if not, write to the Free
017:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
018:    02111-1307 USA.  */
019: 
020: #if !defined _SIGNAL_H && !defined __need_siginfo_t \
021:     && !defined __need_sigevent_t
022: # error "Never include this file directly.  Use <signal.h> instead"
023: #endif
024: 
025: #include <bits/wordsize.h>
026: 
027: #if (!defined __have_sigval_t \
028:      && (defined _SIGNAL_H || defined __need_siginfo_t \
029:          || defined __need_sigevent_t))
030: # define __have_sigval_t        1
031: 
032: /* Type for data associated with a signal.  */
033: typedef union sigval
034:   {
035:     int sival_int;
036:     void *sival_ptr;
037:   } sigval_t;
038: #endif
039: 
040: #if (!defined __have_siginfo_t \
041:      && (defined _SIGNAL_H || defined __need_siginfo_t))
042: # define __have_siginfo_t       1
043: 
044: # define __SI_MAX_SIZE     128
045: # if __WORDSIZE == 64
046: #  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 4)
047: # else
048: #  define __SI_PAD_SIZE     ((__SI_MAX_SIZE / sizeof (int)) - 3)
049: # endif
050: 
051: typedef struct siginfo
052:   {
053:     int si_signo;               /* Signal number.  */
054:     int si_errno;               /* If non-zero, an errno value associated with
055:                                    this signal, as defined in <errno.h>.  */
056:     int si_code;                /* Signal code.  */
057: 
058:     union
059:       {
060:         int _pad[__SI_PAD_SIZE];
061: 
062:          /* kill().  */
063:         struct
064:           {
065:             __pid_t si_pid;     /* Sending process ID.  */
066:             __uid_t si_uid;     /* Real user ID of sending process.  */
067:           } _kill;
068: 
069:         /* POSIX.1b timers.  */
070:         struct
071:           {
072:             int si_tid;         /* Timer ID.  */
073:             int si_overrun;     /* Overrun count.  */
074:             sigval_t si_sigval; /* Signal value.  */
075:           } _timer;
076: 
077:         /* POSIX.1b signals.  */
078:         struct
079:           {
080:             __pid_t si_pid;     /* Sending process ID.  */
081:             __uid_t si_uid;     /* Real user ID of sending process.  */
082:             sigval_t si_sigval; /* Signal value.  */
083:           } _rt;
084: 
085:         /* SIGCHLD.  */
086:         struct
087:           {
088:             __pid_t si_pid;     /* Which child.  */
089:             __uid_t si_uid;     /* Real user ID of sending process.  */
090:             int si_status;      /* Exit value or signal.  */
091:             __clock_t si_utime;
092:             __clock_t si_stime;
093:           } _sigchld;
094: 
095:         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS.  */
096:         struct
097:           {
098:             void *si_addr;      /* Faulting insn/memory ref.  */
099:           } _sigfault;
100: 
101:         /* SIGPOLL.  */
102:         struct
103:           {
104:             long int si_band;   /* Band event for SIGPOLL.  */
105:             int si_fd;
106:           } _sigpoll;
107:       } _sifields;
108:   } siginfo_t;
109: 
110: 
111: /* X/Open requires some more fields with fixed names.  */
112: # define si_pid         _sifields._kill.si_pid
113: # define si_uid         _sifields._kill.si_uid
114: # define si_timerid     _sifields._timer.si_tid
115: # define si_overrun     _sifields._timer.si_overrun
116: # define si_status      _sifields._sigchld.si_status
117: # define si_utime       _sifields._sigchld.si_utime
118: # define si_stime       _sifields._sigchld.si_stime
119: # define si_value       _sifields._rt.si_sigval
120: # define si_int         _sifields._rt.si_sigval.sival_int
121: # define si_ptr         _sifields._rt.si_sigval.sival_ptr
122: # define si_addr        _sifields._sigfault.si_addr
123: # define si_band        _sifields._sigpoll.si_band
124: # define si_fd          _sifields._sigpoll.si_fd
125: 
126: 
127: /* Values for `si_code'.  Positive values are reserved for kernel-generated
128:    signals.  */
129: enum
130: {
131:   SI_ASYNCNL = -60,             /* Sent by asynch name lookup completion.  */
132: # define SI_ASYNCNL     SI_ASYNCNL
133:   SI_TKILL = -6,                /* Sent by tkill.  */
134: # define SI_TKILL       SI_TKILL
135:   SI_SIGIO,                     /* Sent by queued SIGIO. */
136: # define SI_SIGIO       SI_SIGIO
137:   SI_ASYNCIO,                   /* Sent by AIO completion.  */
138: # define SI_ASYNCIO     SI_ASYNCIO
139:   SI_MESGQ,                     /* Sent by real time mesq state change.  */
140: # define SI_MESGQ       SI_MESGQ
141:   SI_TIMER,                     /* Sent by timer expiration.  */
142: # define SI_TIMER       SI_TIMER
143:   SI_QUEUE,                     /* Sent by sigqueue.  */
144: # define SI_QUEUE       SI_QUEUE
145:   SI_USER,                      /* Sent by kill, sigsend.  */
146: # define SI_USER        SI_USER
147:   SI_KERNEL = 0x80              /* Send by kernel.  */
148: #define SI_KERNEL       SI_KERNEL
149: };
150: 
151: 
152: /* `si_code' values for SIGILL signal.  */
153: enum
154: {
155:   ILL_ILLOPC = 1,               /* Illegal opcode.  */
156: # define ILL_ILLOPC     ILL_ILLOPC
157:   ILL_ILLOPN,                   /* Illegal operand.  */
158: # define ILL_ILLOPN     ILL_ILLOPN
159:   ILL_ILLADR,                   /* Illegal addressing mode.  */
160: # define ILL_ILLADR     ILL_ILLADR
161:   ILL_ILLTRP,                   /* Illegal trap. */
162: # define ILL_ILLTRP     ILL_ILLTRP
163:   ILL_PRVOPC,                   /* Privileged opcode.  */
164: # define ILL_PRVOPC     ILL_PRVOPC
165:   ILL_PRVREG,                   /* Privileged register.  */
166: # define ILL_PRVREG     ILL_PRVREG
167:   ILL_COPROC,                   /* Coprocessor error.  */
168: # define ILL_COPROC     ILL_COPROC
169:   ILL_BADSTK                    /* Internal stack error.  */
170: # define ILL_BADSTK     ILL_BADSTK
171: };
172: 
173: /* `si_code' values for SIGFPE signal.  */
174: enum
175: {
176:   FPE_INTDIV = 1,               /* Integer divide by zero.  */
177: # define FPE_INTDIV     FPE_INTDIV
178:   FPE_INTOVF,                   /* Integer overflow.  */
179: # define FPE_INTOVF     FPE_INTOVF
180:   FPE_FLTDIV,                   /* Floating point divide by zero.  */
181: # define FPE_FLTDIV     FPE_FLTDIV
182:   FPE_FLTOVF,                   /* Floating point overflow.  */
183: # define FPE_FLTOVF     FPE_FLTOVF
184:   FPE_FLTUND,                   /* Floating point underflow.  */
185: # define FPE_FLTUND     FPE_FLTUND
186:   FPE_FLTRES,                   /* Floating point inexact result.  */
187: # define FPE_FLTRES     FPE_FLTRES
188:   FPE_FLTINV,                   /* Floating point invalid operation.  */
189: # define FPE_FLTINV     FPE_FLTINV
190:   FPE_FLTSUB                    /* Subscript out of range.  */
191: # define FPE_FLTSUB     FPE_FLTSUB
192: };
193: 
194: /* `si_code' values for SIGSEGV signal.  */
195: enum
196: {
197:   SEGV_MAPERR = 1,              /* Address not mapped to object.  */
198: # define SEGV_MAPERR    SEGV_MAPERR
199:   SEGV_ACCERR                   /* Invalid permissions for mapped object.  */
200: # define SEGV_ACCERR    SEGV_ACCERR
201: };
202: 
203: /* `si_code' values for SIGBUS signal.  */
204: enum
205: {
206:   BUS_ADRALN = 1,               /* Invalid address alignment.  */
207: # define BUS_ADRALN     BUS_ADRALN
208:   BUS_ADRERR,                   /* Non-existant physical address.  */
209: # define BUS_ADRERR     BUS_ADRERR
210:   BUS_OBJERR                    /* Object specific hardware error.  */
211: # define BUS_OBJERR     BUS_OBJERR
212: };
213: 
214: /* `si_code' values for SIGTRAP signal.  */
215: enum
216: {
217:   TRAP_BRKPT = 1,               /* Process breakpoint.  */
218: # define TRAP_BRKPT     TRAP_BRKPT
219:   TRAP_TRACE                    /* Process trace trap.  */
220: # define TRAP_TRACE     TRAP_TRACE
221: };
222: 
223: /* `si_code' values for SIGCHLD signal.  */
224: enum
225: {
226:   CLD_EXITED = 1,               /* Child has exited.  */
227: # define CLD_EXITED     CLD_EXITED
228:   CLD_KILLED,                   /* Child was killed.  */
229: # define CLD_KILLED     CLD_KILLED
230:   CLD_DUMPED,                   /* Child terminated abnormally.  */
231: # define CLD_DUMPED     CLD_DUMPED
232:   CLD_TRAPPED,                  /* Traced child has trapped.  */
233: # define CLD_TRAPPED    CLD_TRAPPED
234:   CLD_STOPPED,                  /* Child has stopped.  */
235: # define CLD_STOPPED    CLD_STOPPED
236:   CLD_CONTINUED                 /* Stopped child has continued.  */
237: # define CLD_CONTINUED  CLD_CONTINUED
238: };
239: 
240: /* `si_code' values for SIGPOLL signal.  */
241: enum
242: {
243:   POLL_IN = 1,                  /* Data input available.  */
244: # define POLL_IN        POLL_IN
245:   POLL_OUT,                     /* Output buffers available.  */
246: # define POLL_OUT       POLL_OUT
247:   POLL_MSG,                     /* Input message available.   */
248: # define POLL_MSG       POLL_MSG
249:   POLL_ERR,                     /* I/O error.  */
250: # define POLL_ERR       POLL_ERR
251:   POLL_PRI,                     /* High priority input available.  */
252: # define POLL_PRI       POLL_PRI
253:   POLL_HUP                      /* Device disconnected.  */
254: # define POLL_HUP       POLL_HUP
255: };
256: 
257: # undef __need_siginfo_t
258: #endif  /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t).  */
259: 
260: 
261: #if (defined _SIGNAL_H || defined __need_sigevent_t) \
262:     && !defined __have_sigevent_t
263: # define __have_sigevent_t      1
264: 
265: /* Structure to transport application-defined values with signals.  */
266: # define __SIGEV_MAX_SIZE       64
267: # if __WORDSIZE == 64
268: #  define __SIGEV_PAD_SIZE      ((__SIGEV_MAX_SIZE / sizeof (int)) - 4)
269: # else
270: #  define __SIGEV_PAD_SIZE      ((__SIGEV_MAX_SIZE / sizeof (int)) - 3)
271: # endif
272: 
273: typedef struct sigevent
274:   {
275:     sigval_t sigev_value;
276:     int sigev_signo;
277:     int sigev_notify;
278: 
279:     union
280:       {
281:         int _pad[__SIGEV_PAD_SIZE];
282: 
283:         /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the
284:            thread to receive the signal.  */
285:         __pid_t _tid;
286: 
287:         struct
288:           {
289:             void (*_function) (sigval_t);       /* Function to start.  */
290:             void *_attribute;                   /* Really pthread_attr_t.  */
291:           } _sigev_thread;
292:       } _sigev_un;
293:   } sigevent_t;
294: 
295: /* POSIX names to access some of the members.  */
296: # define sigev_notify_function   _sigev_un._sigev_thread._function
297: # define sigev_notify_attributes _sigev_un._sigev_thread._attribute
298: 
299: /* `sigev_notify' values.  */
300: enum
301: {
302:   SIGEV_SIGNAL = 0,             /* Notify via signal.  */
303: # define SIGEV_SIGNAL   SIGEV_SIGNAL
304:   SIGEV_NONE,                   /* Other notification: meaningless.  */
305: # define SIGEV_NONE     SIGEV_NONE
306:   SIGEV_THREAD,                 /* Deliver via thread creation.  */
307: # define SIGEV_THREAD   SIGEV_THREAD
308: 
309:   SIGEV_THREAD_ID = 4           /* Send signal to specific thread.  */
310: #define SIGEV_THREAD_ID SIGEV_THREAD_ID
311: };
312: 
313: #endif  /* have _SIGNAL_H.  */
314: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/