File: signalclasses.h.html

package info (click to toggle)
rudiments 0.31-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 7,516 kB
  • ctags: 3,248
  • sloc: asm: 23,776; cpp: 22,792; sh: 7,769; ansic: 1,769; makefile: 1,054; xml: 169; perl: 19
file content (179 lines) | stat: -rw-r--r-- 13,795 bytes parent folder | download | duplicates (2)
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<html>
<head>
<title>~/src/firstworks/rudiments-0.31/include/rudiments/signalclasses.h.html</title>
<meta name="Generator" content="Vim/7.0">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#ffffff" text="#000000">
<pre>
<font color="#0000ff">// Copyright (c) 1999-2002 David Muse</font>
<font color="#0000ff">// See the COPYING file for more information.</font>

<font color="#a020f0">#ifndef RUDIMENTS_SIGNALCLASSES_H</font>
<font color="#a020f0">#define RUDIMENTS_SIGNALCLASSES_H</font>

<font color="#a020f0">#include </font><font color="#ff00ff">&lt;rudiments/private/signalclassesincludes.h&gt;</font>

<font color="#0000ff">// Signals are a means for processes to interrupt each other.</font>
<font color="#0000ff">//</font>
<font color="#0000ff">// Many signals will cause a process to exit unless they are explicitly</font>
<font color="#0000ff">// handled by a callback function.</font>
<font color="#0000ff">//</font>
<font color="#0000ff">// Different architectures have different signals, but most have the following</font>
<font color="#0000ff">// signals:</font>


<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
<font color="#2e8b57"><b>namespace</b></font> rudiments {
<font color="#a020f0">#endif</font>


<font color="#0000ff">// A signalset it just a collection of signals.  Many signal-related functions</font>
<font color="#0000ff">// take signalsets for arguments.  The signalset class makes signalsets</font>
<font color="#0000ff">// easy to manage.</font>
<font color="#2e8b57"><b>class</b></font> signalsetprivate;
<font color="#2e8b57"><b>class</b></font> signalset {
        <font color="#a52a2a"><b>public</b></font>:
                        signalset();
                        ~signalset();
                <font color="#2e8b57"><b>bool</b></font>  addSignal(<font color="#2e8b57"><b>int</b></font> signum);
                        <font color="#0000ff">// Add the signal &quot;signum&quot; to the set.</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>  addAllSignals();
                        <font color="#0000ff">// Add all signals to the set.</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>  removeSignal(<font color="#2e8b57"><b>int</b></font> signum);
                        <font color="#0000ff">// Remove the signal &quot;signum&quot; from the set.</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>  removeAllSignals();
                        <font color="#0000ff">// Remove all signals from the set.</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>int</b></font>   signalIsInSet(<font color="#2e8b57"><b>int</b></font> signum) <font color="#2e8b57"><b>const</b></font>;
                        <font color="#0000ff">// Returns 1 if the signal &quot;signum&quot; is in the </font>
                        <font color="#0000ff">// set, 0 if it is not and -1 on error.</font>

                sigset_t        *getSignalSet();
                                <font color="#0000ff">// returns the set of signals</font>

<font color="#a020f0">        #include </font><font color="#ff00ff">&lt;rudiments/private/signalset.h&gt;</font>
};



<font color="#0000ff">// The signalmanager class provides methods for sending, blocking and waiting </font>
<font color="#0000ff">// for signals.</font>
<font color="#2e8b57"><b>class</b></font> signalmanager {
        <font color="#a52a2a"><b>public</b></font>:
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>bool</b></font>   sendSignal(pid_t processid, <font color="#2e8b57"><b>int</b></font> signum);
                                <font color="#0000ff">// Send signal &quot;signum&quot; to process &quot;processid&quot;.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>bool</b></font>   raiseSignal(<font color="#2e8b57"><b>int</b></font> signum);
                                <font color="#0000ff">// Send signal &quot;signum&quot; to self.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>int</b></font>   alarm(<font color="#2e8b57"><b>unsigned</b></font> <font color="#2e8b57"><b>int</b></font> seconds);
                                <font color="#0000ff">// Sends signal SIGALRM to self after &quot;seconds&quot;</font>
                                <font color="#0000ff">// have elapsed.  If &quot;seconds&quot; is 0, the alarm</font>
                                <font color="#0000ff">// is disabled.  Calling this method cancels</font>
                                <font color="#0000ff">// any previously set alarm.</font>
                                <font color="#0000ff">//</font>
                                <font color="#0000ff">// Returns the number of seconds that were</font>
                                <font color="#0000ff">// remaining until any previously scheduled</font>
                                <font color="#0000ff">// alarm was to be delivered or 0 if there</font>
                                <font color="#0000ff">// was no previously scheduled alarm.</font>
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>bool</b></font>   ignoreSignals(<font color="#2e8b57"><b>const</b></font> sigset_t *sigset);
                                <font color="#0000ff">// Ignore signal &quot;signum&quot;.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>bool</b></font>   waitForSignals(<font color="#2e8b57"><b>const</b></font> sigset_t *mask);
                                <font color="#0000ff">// Wait until a signal NOT in the signal set </font>
                                <font color="#0000ff">// &quot;mask&quot; is received.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>static</b></font>        <font color="#2e8b57"><b>bool</b></font>   examineBlockedSignals(sigset_t *sigset);
                                <font color="#0000ff">// Sets &quot;sigset&quot; to the set of signals that</font>
                                <font color="#0000ff">// were raised, but blocked during a call to </font>
                                <font color="#0000ff">// waitForSignals().</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
};


<font color="#0000ff">// The signalhandler class provides methods for catching and handling signals.</font>
<font color="#2e8b57"><b>class</b></font> signalhandlerprivate;
<font color="#2e8b57"><b>class</b></font> signalhandler {
        <font color="#a52a2a"><b>public</b></font>:
                        signalhandler();
                        signalhandler(<font color="#2e8b57"><b>int</b></font> signum, <font color="#2e8b57"><b>void</b></font> *handler);
                        <font color="#0000ff">// Calls the setHandler() and handleSignal() methods</font>
                        <font color="#0000ff">// below during instantiation.</font>
                        ~signalhandler();

                <font color="#2e8b57"><b>void</b></font>  setHandler(<font color="#2e8b57"><b>void</b></font> *handler);
                        <font color="#0000ff">// Sets the function to call when the process</font>
                        <font color="#0000ff">// receives the signal.</font>
                <font color="#2e8b57"><b>void</b></font>  *getHandler();
                        <font color="#0000ff">// Returns a pointer to the function that will be</font>
                        <font color="#0000ff">// called when the process receives the signal.</font>

                <font color="#2e8b57"><b>bool</b></font>  handleSignal(<font color="#2e8b57"><b>int</b></font> signum);
                        <font color="#0000ff">// Instructs the program to handle &quot;signum&quot; by calling</font>
                        <font color="#0000ff">// the handler set previously in setHandler().  May</font>
                        <font color="#0000ff">// be called multiple times to associate the same</font>
                        <font color="#0000ff">// handler with several signals.</font>
                        <font color="#0000ff">//</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>  handleSignal(<font color="#2e8b57"><b>int</b></font> signum, signalhandler *oldhandler);
                        <font color="#0000ff">// Instructs the program to handle &quot;signum&quot; by calling</font>
                        <font color="#0000ff">// the handler set previously in setHandler().  May</font>
                        <font color="#0000ff">// be called multiple times to associate the same</font>
                        <font color="#0000ff">// handler with several signals.  Populates oldhandler</font>
                        <font color="#0000ff">// with the values that were used to handle this signal</font>
                        <font color="#0000ff">// prior to this call.</font>
                        <font color="#0000ff">//</font>
                        <font color="#0000ff">// Returns true on success and false on failure.</font>

                <font color="#0000ff">// Signal flags modify the behavior of the signal handling</font>
                <font color="#0000ff">// process.</font>
                <font color="#2e8b57"><b>void</b></font>  removeAllFlags();
                        <font color="#0000ff">// Remove all flags.</font>
                <font color="#2e8b57"><b>void</b></font>  addFlag(<font color="#2e8b57"><b>int</b></font> flag);
                        <font color="#0000ff">// Add &quot;flag&quot; to the set of flags modifying the</font>
                        <font color="#0000ff">// behavior of this signal handler.</font>
                <font color="#2e8b57"><b>int</b></font>   getFlags() <font color="#2e8b57"><b>const</b></font>;
                        <font color="#0000ff">// Return the set of flags modifying the behavior of </font>
                        <font color="#0000ff">// this signal handler.</font>


                <font color="#0000ff">// A signal mask is the set of signals that are blocked while</font>
                <font color="#0000ff">// the signal handler function is being called.  Masking</font>
                <font color="#0000ff">// signals can ensure that the function executes without</font>
                <font color="#0000ff">// interruption.</font>
                <font color="#2e8b57"><b>bool</b></font>          addSignalToMask(<font color="#2e8b57"><b>int</b></font> signum);
                                <font color="#0000ff">// Add the signal &quot;signum&quot; to the mask.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>          addAllSignalsToMask();
                                <font color="#0000ff">// Mask all signals.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>          removeSignalFromMask(<font color="#2e8b57"><b>int</b></font> signum);
                                <font color="#0000ff">// Remove the signal &quot;signum&quot; from the mask.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>bool</b></font>          removeAllSignalsFromMask();
                                <font color="#0000ff">// Mask no signals.</font>
                                <font color="#0000ff">// Returns true on success and false on failure.</font>
                <font color="#2e8b57"><b>int</b></font>           signalIsInMask(<font color="#2e8b57"><b>int</b></font> signum) <font color="#2e8b57"><b>const</b></font>;
                                <font color="#0000ff">// Returns 1 if the signal &quot;signum&quot; is in the </font>
                                <font color="#0000ff">// set, 0 if it is not and -1 on error.</font>
                <font color="#2e8b57"><b>void</b></font>          setMask(sigset_t sigset);
                                <font color="#0000ff">// Explicitly sets the mask to &quot;sigset&quot;.</font>
                sigset_t        getMask() <font color="#2e8b57"><b>const</b></font>;
                                <font color="#0000ff">// Returns the set of signals currently masked.</font>

<font color="#a020f0">        #include </font><font color="#ff00ff">&lt;rudiments/private/signalhandler.h&gt;</font>

};

<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
}
<font color="#a020f0">#endif</font>

<font color="#a020f0">#endif</font>
</pre>
</body>
</html>