Content deleted Content added
No edit summary |
m Bot: link syntax and minor changes |
||
(9 intermediate revisions by 7 users not shown) | |||
Line 1:
{{Short description|Handling of signals in the C programming language}}
{{Use dmy dates|date=
{{C_Standard Library}}
In the [[C Standard Library]], '''signal processing''' defines how a program handles various [[Signal (computing)|signals]] while it executes. A signal can report some exceptional behavior within the program (
==Standard signals==
Line 10:
The C standard defines only 6 signals. They are all defined in <code>signal.h</code> header (<code>csignal</code> header in [[C++]]):<ref name=c99>{{cite book | url=https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf | title=ISO/IEC 9899:1999 specification | at=p. 258, § 7.14 ''Signal handling''}}</ref>
*<code>SIGABRT</code>
*<code>SIGFPE</code>
*<code>SIGILL</code>
*<code>SIGINT</code>
*<code>SIGSEGV</code>
*<code>SIGTERM</code>
Additional signals may be specified in the <code>signal.h</code> header by the implementation. For example, Unix and [[Unix-like]] operating systems (such as [[Linux]]) define more than 15 additional signals; see [[Unix signal]].<ref name="sus">{{cite web | url=https://pubs.opengroup.org/onlinepubs/007904975/ | title=The Open Group Base Specifications Issue 6
=== Debugging ===
Line 28:
A signal handler is a [[Function (computer science)|function]] which is called by the target environment when the corresponding signal occurs. The target environment suspends execution of the program until the signal handler returns or calls <code>longjmp()</code>.
Signal handlers can be set with <code>signal()</code> or <code>sigaction()</code>. The behavior of <code>signal()</code> has been changed multiple times across history and
If the signal reports an error within the program (and the signal is not asynchronous), the signal handler can terminate by calling <code>abort()</code>, <code>exit()</code>, or <code>longjmp()</code>.
Line 34:
==Functions==
{| class="wikitable
! Function
! Description
Line 54:
#include <stdio.h>
#include <stdlib.h>
volatile sig_atomic_t status = 0;
static void catch_function(int signo) {
status = signo;
puts("Interactive attention signal caught.");▼
}
Line 66 ⟶ 68:
}
puts("Raising the interactive attention signal.");
if (raise(SIGINT)
fputs("Error raising the signal.\n", stderr);
return EXIT_FAILURE;
}
▲ if (status == SIGINT) puts("Interactive attention signal caught.");
puts("Exiting.");
return EXIT_SUCCESS;
|