blob: f0710c905b90a5d3dc0687f94e9077f42253b0e1 [file] [log] [blame]
<html lang="en">
<head>
<title>Signal Sets - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Blocking-Signals.html#Blocking-Signals" title="Blocking Signals">
<link rel="prev" href="Why-Block.html#Why-Block" title="Why Block">
<link rel="next" href="Process-Signal-Mask.html#Process-Signal-Mask" title="Process Signal Mask">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Signal-Sets"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Process-Signal-Mask.html#Process-Signal-Mask">Process Signal Mask</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Why-Block.html#Why-Block">Why Block</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Blocking-Signals.html#Blocking-Signals">Blocking Signals</a>
<hr>
</div>
<h4 class="subsection">24.7.2 Signal Sets</h4>
<p>All of the signal blocking functions use a data structure called a
<dfn>signal set</dfn> to specify what signals are affected. Thus, every
activity involves two stages: creating the signal set, and then passing
it as an argument to a library function.
<a name="index-signal-set-2957"></a>
These facilities are declared in the header file <samp><span class="file">signal.h</span></samp>.
<a name="index-signal_002eh-2958"></a>
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Data Type: <b>sigset_t</b><var><a name="index-sigset_005ft-2959"></a></var><br>
<blockquote><p>The <code>sigset_t</code> data type is used to represent a signal set.
Internally, it may be implemented as either an integer or structure
type.
<p>For portability, use only the functions described in this section to
initialize, change, and retrieve information from <code>sigset_t</code>
objects&mdash;don't try to manipulate them directly.
</p></blockquote></div>
<p>There are two ways to initialize a signal set. You can initially
specify it to be empty with <code>sigemptyset</code> and then add specified
signals individually. Or you can specify it to be full with
<code>sigfillset</code> and then delete specified signals individually.
<p>You must always initialize the signal set with one of these two
functions before using it in any other way. Don't try to set all the
signals explicitly because the <code>sigset_t</code> object might include some
other information (like a version field) that needs to be initialized as
well. (In addition, it's not wise to put into your program an
assumption that the system has no signals aside from the ones you know
about.)
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>sigemptyset</b> (<var>sigset_t *set</var>)<var><a name="index-sigemptyset-2960"></a></var><br>
<blockquote><p>This function initializes the signal set <var>set</var> to exclude all of the
defined signals. It always returns <code>0</code>.
</p></blockquote></div>
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>sigfillset</b> (<var>sigset_t *set</var>)<var><a name="index-sigfillset-2961"></a></var><br>
<blockquote><p>This function initializes the signal set <var>set</var> to include
all of the defined signals. Again, the return value is <code>0</code>.
</p></blockquote></div>
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>sigaddset</b> (<var>sigset_t *set, int signum</var>)<var><a name="index-sigaddset-2962"></a></var><br>
<blockquote><p>This function adds the signal <var>signum</var> to the signal set <var>set</var>.
All <code>sigaddset</code> does is modify <var>set</var>; it does not block or
unblock any signals.
<p>The return value is <code>0</code> on success and <code>-1</code> on failure.
The following <code>errno</code> error condition is defined for this function:
<dl>
<dt><code>EINVAL</code><dd>The <var>signum</var> argument doesn't specify a valid signal.
</dl>
</p></blockquote></div>
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>sigdelset</b> (<var>sigset_t *set, int signum</var>)<var><a name="index-sigdelset-2963"></a></var><br>
<blockquote><p>This function removes the signal <var>signum</var> from the signal set
<var>set</var>. All <code>sigdelset</code> does is modify <var>set</var>; it does not
block or unblock any signals. The return value and error conditions are
the same as for <code>sigaddset</code>.
</p></blockquote></div>
<p>Finally, there is a function to test what signals are in a signal set:
<!-- signal.h -->
<!-- POSIX.1 -->
<div class="defun">
&mdash; Function: int <b>sigismember</b> (<var>const sigset_t *set, int signum</var>)<var><a name="index-sigismember-2964"></a></var><br>
<blockquote><p>The <code>sigismember</code> function tests whether the signal <var>signum</var> is
a member of the signal set <var>set</var>. It returns <code>1</code> if the signal
is in the set, <code>0</code> if not, and <code>-1</code> if there is an error.
<p>The following <code>errno</code> error condition is defined for this function:
<dl>
<dt><code>EINVAL</code><dd>The <var>signum</var> argument doesn't specify a valid signal.
</dl>
</p></blockquote></div>
</body></html>