setnonblocking - 设置句柄为非阻塞方式
*/
int setnonblocking(int sockfd)
{
if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1) {
return -1;
}
return 0;
}
/*
atexit(do_at_exit);终止注册函数 对于exit适用,但是
void do_at_exit(void)
{
printf("You can see the output when the program terminates\n");
}
int main(){
int flag;
flag=atexit(do_at_exit);
if (flag != 0) {
printf("Cannot set exit function\n");
return EXIT_FAILURE;
}
_exit(EXIT_SUCCESS);
}
将不会打印出printf("You can see the output when the program terminates\n");
exit 和_exit 函数用于正常终止一个程序:_exit 立即进入内核,exit 则先执行一些清除处理(包括调用执行各终止处理
程序,关闭所有标准I / O 流等),然后进入内核。
进程的终止方式: 有8种方式使进程终止,其中前5种为正常终止,它们是
1:从 main 返回 2:调用 exit
3:调用 _exit 或 _Exit 4:最后一个线程从其启动例程返回
5:最后一个线程调用 pthread_exit
异常终止有3种,它们是 6:调用 abort
7:接到一个信号并终止 8:最后一个线程对取消请求做出响应