首页 > 代码库 > unix网络编程
unix网络编程
先来考虑信号处理
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 //阻塞设置的demo2 sigemptyset(&mask);3 sigaddset(&mask, SIGCHLD);4 sigprocmask(SIG_BLOCK, &mask, NULL);
回到sigaction结构体的设置
//结构体设置demo. from: <csapp>/p517/fig8.34handler_t *Signal(int signum, handler_t *handler){ struct sigaction action, old_action; sigemptyset(&action.sa_mask); //Block sigs of type being handled action.sa_flags = SE_RESTART; //Restart syscalls if possible if (sigaction(signum, &action, &old_action) < 0) unix_error("Signal error"); return (old_acion.sa_handler);}
//结构体设置demo2. from beejstruct sigaction sa;....sa.sa_handler = sigchld_handler;sigemptyset(&sa.sa_mask);sa.sa_flags = SA_RESTART;if (sigaction(SIGCHLD, &sa, NULL) == -1) { ... exit(1);}
unix网络编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。