����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