����14-6 linux/include/signal.h
1 #ifndef _SIGNAL_H
2 #define _SIGNAL_H
3
4 #include <sys/types.h> // ����ͷ�ļ��������˻�����ϵͳ�������͡�
5
6 typedef int sig_atomic_t; // �����ź�ԭ�Ӳ������͡�
7 typedef unsigned int sigset_t; /* 32 bits */ // �����źż����͡�
8
9 #define _NSIG 32 // �����ź����� -- 32 �֡�
10 #define NSIG _NSIG // NSIG = _NSIG
11
// ������Щ��Linux 0.12�ں��ж�����źš����а�����POSIX.1Ҫ�������20���źš�
12 #define SIGHUP 1 // Hang Up -- �ҶϿ����ն˻���̡�
13 #define SIGINT 2 // Interrupt -- ���Լ��̵��жϡ�
14 #define SIGQUIT 3 // Quit -- ���Լ��̵��˳���
15 #define SIGILL 4 // Illeagle -- �Ƿ�ָ�
16 #define SIGTRAP 5 // Trap -- ���ٶϵ㡣
17 #define SIGABRT 6 // Abort -- �쳣������
18 #define SIGIOT 6 // IO Trap -- ͬ�ϡ�
19 #define SIGUNUSED 7 // Unused -- û��ʹ�á�
20 #define SIGFPE 8 // FPE -- ������������
21 #define SIGKILL 9 // Kill -- ǿ�Ƚ�����ֹ��
22 #define SIGUSR1 10 // User1 -- �û��ź�1�����̿�ʹ�á�
23 #define SIGSEGV 11 // Segment Violation -- ��Ч�ڴ����á�
24 #define SIGUSR2 12 // User2 -- �û��ź�2�����̿�ʹ�á�
25 #define SIGPIPE 13 // Pipe -- �ܵ�д���������ߡ�
26 #define SIGALRM 14 // Alarm -- ʵʱ��ʱ��������
27 #define SIGTERM 15 // Terminate -- ������ֹ��
28 #define SIGSTKFLT 16 // Stack Fault -- ջ������Э����������
29 #define SIGCHLD 17 // Child -- �ӽ���ֹͣ����ֹ��
30 #define SIGCONT 18 // Continue -- �ָ����̼���ִ�С�
31 #define SIGSTOP 19 // Stop -- ֹͣ���̵�ִ�С�
32 #define SIGTSTP 20 // TTY Stop -- tty����ֹͣ���̣��ɺ��ԡ�
33 #define SIGTTIN 21 // TTY In -- ��̨�����������롣
34 #define SIGTTOU 22 // TTY Out -- ��̨�������������
35
36 /* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */
/* OK���һ�û��ʵ��sigactions�ı��ƣ�����ͷ�ļ�����ϣ������POSIX�� */
// ����ԭע���Ѿ���ʱ����Ϊ��0.12�ں����Ѿ�ʵ����sigaction()��������sigaction�ṹ
// sa_flags��־�ֶο�ȡ�ķ��ų���ֵ��
37 #define SA_NOCLDSTOP 1 // ���ӽ��̴���ֹͣ״̬���Ͳ���SIGCHLD������
38 #define SA_INTERRUPT 0x20000000 // ϵͳ���ñ��ź��жϺ���������ϵͳ���á�
39 #define SA_NOMASK 0x40000000 // ����ֹ��ָ�����źŴ������������յ����źš�
40 #define SA_ONESHOT 0x80000000 // �źž��һ�������ù��ͻָ���Ĭ�ϴ��������
41
// ���³�������sigprocmask(how, )-- �ı������źż�(������)�����ڸı�ú�������Ϊ��
42 #define SIG_BLOCK 0 /* for blocking signals */ // �������źż��м��ϸ����źš�
43 #define SIG_UNBLOCK 1 /* for unblocking signals */ // �������źż���ɾ��ָ���źš�
44 #define SIG_SETMASK 2 /* for setting the signal mask */ // ���������źż���
45
// ���������������Ŷ���ʾָ������ֵ�ĺ���ָ�룬�Ҷ���һ��int���Ͳ�����������ָ��
// ֵ�����Ͻ�ʵ���ϲ����ܳ��ֵĺ�����ֵַ������Ϊ����signal�����ĵڶ�����������
// �ڸ�֪�ںˣ����ں˴����źŻ���Զ��źŵĴ�����ʹ�÷����μ� kernel/signal.c����
// ��94--96��
46 #define SIG_DFL ((void (*)(int))0) /* default signal handling */
// Ĭ���źŴ��������źž������
47 #define SIG_IGN ((void (*)(int))1) /* ignore signal */
// �����źŵĴ�������
48 #define SIG_ERR ((void (*)(int))-1) /* error return from signal */
// �źŴ������ش���
49
// ���涨���ʼ��������sigaction�ṹ�ź�������ĺꡣ
50 #ifdef notdef
51 #define sigemptyset(mask) ((*(mask) = 0), 1) // ��mask���㡣
52 #define sigfillset(mask) ((*(mask) = ~0), 1) // ��mask���б���λ��λ��
53 #endif
54
// ������sigaction�����ݽṹ��
// sa_handler�Ƕ�Ӧij�ź�ָ��Ҫ��ȡ���ж��������������SIG_DFL����SIG_IGN�����Ը�
// �źţ�Ҳ������ָ�������źź�����һ��ָ�롣
// sa_mask�����˶��źŵ������룬���źų���ִ��ʱ����������Щ�źŵĴ�����
// sa_flagsָ���ı��źŴ������̵��źż���������37-40�е�λ��־����ġ�
// sa_restorer�ǻָ�����ָ�룬�ɺ�����Libc�ṩ�����������û�̬��ջ���μ�signal.c��
// ���⣬�����źŴ������ź�Ҳ��������������ʹ����SA_NOMASK��־��
55 struct sigaction {
56 void (*sa_handler)(int);
57 sigset_t sa_mask;
58 int sa_flags;
59 void (*sa_restorer)(void);
60 };
61
// ����signal����������Ϊ�ź�_sig��װһ�µ��źŴ��������źž��������sigaction()
// ���ơ��ú�����������������ָ����Ҫ������ź�_sig������һ������������ֵ�ĺ���ָ��
// _func���ú�������ֵҲ�Ǿ���һ��int���������һ��(int)��������ֵ�ĺ���ָ�룬����
// �������źŵ�ԭ���������
62 void (*signal(int _sig, void (*_func)(int)))(int);
// �������������ڷ����źš�kill() �������κν��̻�����鷢���źš�raise()������ǰ��
// �����������źš������õȼ���kill(getpid(),sig)���μ�kernel/exit.c��60�С�
63 int raise(int sig);
64 int kill(pid_t pid, int sig);
// �ڽ��̵�����ṹ�У�����һ���Ա���λ��ʾ��ǰ���̴�������32λ�ź��ֶ�signal���⣬
// ����һ��ͬ���Ա���λ��ʾ���������ν��̵�ǰ�����źż��������źż������ֶ�blocked��
// Ҳ��32λ��ÿ�����ش���һ����Ӧ�������źš��Ľ��̵������źż�����������������
// ��ָ�����źš� ������������������ڲ������������źż�����Ȼ��ʵ�������ܼ���
// ���汾�ں��л�δʵ�֡�
// ����sigaddset() �� sigdelset() ���ڶ��źż��е��źŽ�������ɾ�ġ� sigaddset()��
// ����maskָ����źż�������ָ�����ź�signo��sigdelset��֮������sigemptyset()��
// sigfillset() ���ڳ�ʼ�����������źż��� ÿ��������ʹ���źż�ǰ������Ҫʹ����������
// ��֮һ�������źż����г�ʼ���� sigemptyset()����������ε������źţ�Ҳ����Ӧ���е�
// �źš�sigfillset()���źż������������źţ�Ҳ�����������źš���Ȼ SIGINT�� SIGSTOP
// �Dz��ܱ����εġ�
// sigismember()���ڲ���һ��ָ���ź��Ƿ����źż��У�1 - �ǣ�0 - ���ǣ�-1 - ��������
65 int sigaddset(sigset_t *mask, int signo);
66 int sigdelset(sigset_t *mask, int signo);
67 int sigemptyset(sigset_t *mask);
68 int sigfillset(sigset_t *mask);
69 int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */
// ��set�е��źŽ��м�⣬���Ƿ��й�����źš���set�з��ؽ����е�ǰ���������źż���
70 int sigpending(sigset_t *set);
// ���溯�����ڸı����Ŀǰ���������źż����ź������룩����oldset����NULL����ͨ����
// ���ؽ��̵�ǰ�����źż�����setָ�벻��NULL�������how��41-43�У�ָʾ�Ľ�������
// �źż���
71 int sigprocmask(int how, sigset_t *set, sigset_t *oldset);
// ���溯���� sigmask ��ʱ�滻���̵��ź�������,Ȼ����ͣ�ý���ֱ���յ�һ���źš�����
// ��ijһ�źŲ��Ӹ��źŴ��������з��أ���ú���Ҳ���أ������ź��������ָ������õ���
// ǰ��ֵ��
72 int sigsuspend(sigset_t *sigmask);
// sigaction() �������ڸı�������յ�ָ���ź�ʱ����ȡ���ж������ı��źŵĴ�������ܡ�
// �μ���kernel/signal.c�����˵����
73 int sigaction(int sig, struct sigaction *act, struct sigaction *oldact);
74
75 #endif /* _SIGNAL_H */
76