学习分享:
F_DUPFD的功能与dup( )/dup2( )类似。
通过F_SETSL/F_GETFL来获取和设置文件status,经常拿来设置文件的阻塞特性。
通过F_SETOWN/F_GETOWN来获取和设置套接字触发的信号的属主,网络编程中常见。
示例代码①:
// 获取指定文件fd的标签属性int flag = fcntl(fd, F_GETFL);// 在其原有属性上,增添非阻塞属性flag |= O_NONBLOCK;fcntl(fd, F_SETFL, flag);
示例代码②:
// 将套接字sockfd的信号属主设置为本进程fcntl(sockfd, F_SETOWN, getpid());
在网络编程中,当一个套接字处于异步通信状态并收到一个远端的数据时,就会使得内核产生一个信号SIGIO,此时我们可以通过上述fcntl()技巧告诉内核这个信号的接收者。一般而言,接收者收到该信号后,就知道套接字上有数据等待处理了。
F_DUPFD的功能与dup( )/dup2( )类似。
通过F_SETSL/F_GETFL来获取和设置文件status,经常拿来设置文件的阻塞特性。
通过F_SETOWN/F_GETOWN来获取和设置套接字触发的信号的属主,网络编程中常见。
示例代码①:
// 获取指定文件fd的标签属性int flag = fcntl(fd, F_GETFL);// 在其原有属性上,增添非阻塞属性flag |= O_NONBLOCK;fcntl(fd, F_SETFL, flag);
示例代码②:
// 将套接字sockfd的信号属主设置为本进程fcntl(sockfd, F_SETOWN, getpid());
在网络编程中,当一个套接字处于异步通信状态并收到一个远端的数据时,就会使得内核产生一个信号SIGIO,此时我们可以通过上述fcntl()技巧告诉内核这个信号的接收者。一般而言,接收者收到该信号后,就知道套接字上有数据等待处理了。