标签:style color 使用 os io strong 文件 数据
信号是软件中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。
每个信号都有一个名字,这些名字都以三个字符SIG开头。例如,SIGABORT是要装信号,当进程调用abort函数时产生这种信号。不存在编号为0的信号。
很多条件可以产生信号:
可以要求内核在某个信号出现时按照下列三种方式之一进行处理:忽略此信号、捕获此信号和执行系统默认动作。
需头文件 |
#include <signal.h> |
|
函数原型 |
int sigprocmask(int how,const sigset_t *set,sigset_t *oset) |
|
函数传入值 |
how(决定函数的操作方式) |
SIG_BLOCK:增加一个信号集合到当前进程的阻塞集合之中 |
SIG_UNBLOCK:从当前的阻塞集合之中删除一个信号集合 |
||
SIG_SETMASK:将当前的信号集合设置为信号阻塞集合 |
||
set:指定信号集 |
||
oset:信号屏蔽字 |
||
函数返回值 |
成功:0 |
|
出错:-1,错误原因存于error中 |
sigpending函数用来查询“未决”信号。其函数原型及说明如下:
sigpending(查询未决信号) |
所需头文件 |
#include <signal.h> |
函数说明 |
将被搁置的信号集合由参数set指针返回 |
函数原型 |
int sigpending(sigset_t *set) |
函数传入值 |
set:要检测信号集 |
函数返回值 |
成功:0 |
出错:-1,错误原因存于error中 |
|
错误代码 |
EFAULT:参数set指针地址无法存取 EINTR:此调用被中断 |
sigaction(查询和设置信号处理方式) |
所需头文件 |
#include <signal.h> |
|
函数说明 |
sigaction()会依参数signum指定的信号编号来设置该信号的处理函数 |
|
函数原型 |
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact) |
|
函数传入值
|
signum |
可以指定SIGKILL和SIGSTOP以外的所有信号 |
act |
参数结构sigaction定义如下 struct sigaction { void (*sa_handler) (int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer) (void); } ① sa_handler:此参数和signal()的参数handler相同,此参数主要用来对信号旧的安装函数signal()处理形式的支持 ② sa_sigaction:新的信号安装机制,处理函数被调用的时候,不但可以得到信号编号,而且可以获悉被调用的原因以及产生问题的上下文的相关信息。 ③ sa_mask:用来设置在处理该信号时暂时将sa_mask指定的信号搁置 ④ sa_restorer: 此参数没有使用 ⑤ sa_flags:用来设置信号处理的其他相关操作,下列的数值可用。可用OR 运算(|)组合 A_NOCLDSTOP:如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程 SA_ONESHOT/SA_RESETHAND:当调用新的信号处理函数前,将此信号处理方式改为系统预设的方式 SA_RESTART:被信号中断的系统调用会自行重启 SA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来 SA_SIGINFO:信号处理函数是带有三个参数的sa_sigaction |
|
oldact |
如果参数oldact不是NULL指针,则原来的信号处理方式会由此结构sigaction返回 |
|
函数返回值 |
成功:0 |
|
出错:-1,错误原因存于error中 |
||
附加说明 |
信号处理安装的新旧两种机制: ① 使用旧的处理机制:struct sigaction act; act.sa_handler=handler_old; ② 使用新的处理机制:struct sigaction act; act.sa_sigaction=handler_new; 并设置sa_flags的SA_SIGINFO位 |
|
错误代码 |
EINVAL:参数signum不合法,或是企图拦截SIGKILL/SIGSTOP信号 EFAULT:参数act,oldact指针地址无法存取 EINTR:此调用被中断 |
sigsuspend函数 |
所需头文件 |
#include <signal.h> |
函数说明 |
将被搁置的信号集合由参数set指针返回 |
函数原型 |
nt sigsuspend(const sigset_t *sigmask); |
函数传入值 |
sigmask:要屏蔽的信号集 |
函数返回值 |
成功:没有成功返回值 |
出错:-1,将errno设置为EINTR |
|
标签:style color 使用 os io strong 文件 数据
原文地址:http://blog.csdn.net/wan_hust/article/details/38639439