系统调用参考:
-
signal
设置处理信号的功能
sighandler_t signal(int signum, sighandler_t handler);
sig:设置处理功能的信号值
SIGABRT (信号中止)异常终止,例如由…发起 退出 功能。
SIGFPE (信号浮点异常)错误的算术运算,例如零分频或导致溢出的运算(不一定是浮点运算)。
SIGILL (信号非法指令)无效的功能图像,例如非法指令。这通常是由于代码中的损坏或尝试执行数据。
SIGINT (信号中断)交互式注意信号。通常由应用程序用户生成。
SIGSEGV (信号分段违规)对存储的无效访问:当程序试图在已分配的内存之外读取或写入时。
SIGTERM (信号终止)发送到程序的终止请求。
handler:指定使用sig指定的信号编号处理信号的方法(通常设定软件退出执行接口exit(-1),延迟文件写入)
默认处理(SIG_DFL):信号由该特定信号的默认动作处理。
忽略信号(SIG_IGN):忽略信号,即使没有意义,代码执行仍将继续。
函数处理程序:定义一个特定的函数来处理信号,void handler_function (int parameter) -
sigaction
检查并改变信号动作,POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,应该使用这个接口)
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
sig:设置处理功能的信号值
act:给信号signum设置新的信号处理函数act
oldact:该信号原有的信号处理函数oldact -
I/O mode
[1] blocking IO - 阻塞IO
[2] nonblocking IO - 非阻塞IO
[3] IO multiplexing - IO多路复用
[4] signal driven IO - 信号驱动IO
[5] asynchronous IO - 异步IO -
select
用于确定一个或多个套接字的状态,对每一个套接字,调用者可查询它的可读性、可写性及错误状态信息(基于位存储)
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
nfds :指定 select() 要遍历的最大文件描述符 + 1
readfds :文件描述的数组,关心读事件
wretefds :文件描述符的数组,关心写事件
exceptfds :文件描述符的数组,关心出错事件
timeout :select 阻塞的时间,NULL表示一直阻塞
配套接口:
void FD_CLR(int fd, fd_set *set);清除文件句柄fd与fdset的联系
int FD_ISSET(int fd, fd_set *set);检查fdset联系的文件句柄fd是否可读写,>0表示可读写
void FD_SET(int fd, fd_set *set);