signals.c
author viric@llimona
Tue, 30 May 2006 12:58:46 +0200
changeset 59 a8776c046a53
parent 28 a206baaa3ad5
permissions -rw-r--r--
Readme adapted to the last version.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     1
#include <signal.h> // Pels senyals
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     2
#include <string.h> // Pel memset
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     3
#include <assert.h>
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     4
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     5
void program_ignore_hup()
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     6
{
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     7
	struct sigaction my_action;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     8
	int result;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
     9
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    10
	my_action.sa_handler = SIG_IGN;
28
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    11
	my_action.sa_flags = 0;
26
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    12
	memset(&my_action.sa_mask, 0, sizeof(my_action.sa_mask));
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    13
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    14
	result = sigaction(SIGHUP, &my_action, NULL);
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    15
	assert(result == 0);
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    16
}
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    17
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    18
void program_child_handler(void (*child_handler)(int))
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    19
{
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    20
	struct sigaction my_action;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    21
	int result;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    22
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    23
	my_action.sa_handler = child_handler;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    24
	my_action.sa_flags = SA_NOCLDSTOP;
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    25
	memset(&my_action.sa_mask, 0, sizeof(my_action.sa_mask));
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    26
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    27
	result = sigaction(SIGCHLD, &my_action, NULL);
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    28
	assert(result == 0);
7227789ca718 Added a c file for signal programming.
viric@mandarina
parents:
diff changeset
    29
}
28
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    30
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    31
void program_handler(int signum, void (*handler)(int))
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    32
{
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    33
	struct sigaction my_action;
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    34
	int result;
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    35
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    36
	my_action.sa_handler = handler;
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    37
	my_action.sa_flags = 0;
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    38
	memset(&my_action.sa_mask, 0, sizeof(my_action.sa_mask));
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    39
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    40
	result = sigaction(signum, &my_action, NULL);
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    41
	assert(result == 0);
a206baaa3ad5 Added main rutines for killing and waiting for childs' dead.
viric@mandarina
parents: 26
diff changeset
    42
}