武昌网站建设公司,表格制作软件app,wordpress 漂亮的博客,idc主机托管先来考虑信号处理int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);该函数用来修改收到一个信号时的处理方式。参数act用来指定新处理方式#xff0c;oldact用来保存先前的处理方式。处理方式保存在一个结构中 struct sigaction {void …先来考虑信号处理int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);该函数用来修改收到一个信号时的处理方式。参数act用来指定新处理方式oldact用来保存先前的处理方式。处理方式保存在一个结构中 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, sa_mask, sa_falgs比较常用sa_handler指向处理函数 sa_mask用于设置阻塞sa_flags用于修改信号的行为。sa_mask是一个位向量掩码在实现I/O mutiplexing的select函数中也有位向量掩码 1 //阻塞设置的demo
2 sigemptyset(mask);
3 sigaddset(mask, SIGCHLD);
4 sigprocmask(SIG_BLOCK, mask, NULL); 回到sigaction结构体的设置 //结构体设置demo. from: csapp/p517/fig8.34
handler_t *Signal(int signum, handler_t *handler)
{struct sigaction action, old_action;sigemptyset(action.sa_mask); //Block sigs of type being handledaction.sa_flags SE_RESTART; //Restart syscalls if possibleif (sigaction(signum, action, old_action) 0)unix_error(Signal error);return (old_acion.sa_handler);
} //结构体设置demo2. from beej
struct sigaction sa;
....
sa.sa_handler sigchld_handler;
sigemptyset(sa.sa_mask);
sa.sa_flags SA_RESTART;if (sigaction(SIGCHLD, sa, NULL) -1) {...exit(1);
} 转载于:https://www.cnblogs.com/autoria/p/5963158.html