chiark / gitweb /
Add lots of references to manual pages, and fix a typo.
[mLib] / man / sig.3
CommitLineData
9f8886c7 1.\" -*-nroff-*-
2.TH sel 3 "23 July 1999" mLib
3.SH NAME
4sig \- more controlled signal handling
5.\" @sig_init
6.\" @sig_add
7.\" @sig_remove
8.SH SYNOPSIS
9.nf
10.B "#include <mLib/sig.h>"
11
12.BI "void sig_add(sig *" s ", int " n ,
13.BI " void (*" proc ")(int " n ", void *" p "), void *" p );
14.BI "void sig_remove(sig *" s );
15.BI "void sig_init(sel_state *" s );
16.fi
17.SH "DESCRIPTION"
18The
19.B sig
20subsystem uses the I/O multiplexing capabilities of
21.B mLib
22(see
23.BR sel (3) for details)
24to provide a more convenient interface for handling signals which don't
25need to be dealt with `right away'. Like the I/O system,
26.B sig
27doesn't allocate any memory for itself: you have to give it space to
28work in.
29.PP
30The system needs to be initialized before use. To do this, you must
31call
32.BR sig_init ,
33passing it the address of an initialized multiplexor object. Signals
34handled through this interface will only be delivered when
35.BR sel_select (3)
36is called on that multiplexor.
37.PP
38To register interest in a signal, call
39.BR sig_add ,
40passing it the following arguments:
41.TP
42.I s
43A pointer to an (uninitialized) object of type
44.BR sig .
45This will be used by the system to retain information about this signal
46claim. You use the address of this object to remove the handler again
47when you've finished.
48.TP
49.I n
50The number of the signal you want to handle.
51.PP
52.TP
53.I proc
54A function to call when the signal is detected. The function is passed
55the signal number and the pointer
56.I p
57passed to
58.BR sig_add .
59.TP
60.I p
61A pointer argument to be passed to
62.I func
63when the signal is detected.
64.PP
65Removing a handler is easy. Call
66.B sig_remove
67with the address of the
68.B sig
69structure you passed to
70.BR sig_add .
71.SS "Multiple signal handlers"
72You may have multiple signal handlers for a signal. All of them are
73called in some unspecified order when the signal occurs.
74.PP
75A signal's disposition is remembered when a handler for it is added and
76there are no handlers already registered. When the last handler for a
77signal is removed, its disposition is restored to its initial remembered
78state.
79.SH "BUGS AND CAVEATS"
80The
81.B sig
82system attempts to set the
83.B SA_RESTART
84flag on signal handlers it creates that signal occurrences don't
85interrupt system calls. This won't be done on systems which don't
86define this flag, for obvious reasons.
87.PP
88The
89.B SA_NOCLDSTOP
90flag is also set, so that stopped child processes aren't reported by a
91signal. This is normally right, but ought to be configurable.
92.PP
93The system uses writes to a nonblocking pipe to integrate with the I/O
94multiplexing system. It's possible (though very unlikely) that signals
95get lost because the pipe is full.
96.SH "AUTHOR"
97Mark Wooding, <mdw@nsict.org>