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"><rudiments/private/signalclassesincludes.h></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 "signum" 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 "signum" 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 "signum" 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"><rudiments/private/signalset.h></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 "signum" to process "processid".</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 "signum" 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 "seconds"</font>
<font color="#0000ff">// have elapsed. If "seconds" 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 "signum".</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">// "mask" 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 "sigset" 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 "signum" 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 "signum" 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 "flag" 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 "signum" 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 "signum" 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 "signum" 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 "sigset".</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"><rudiments/private/signalhandler.h></font>
};
<font color="#a020f0">#ifdef RUDIMENTS_NAMESPACE</font>
}
<font color="#a020f0">#endif</font>
<font color="#a020f0">#endif</font>
</pre>
</body>
</html>
|