Linux网络编程----fcntl和select
linux 网络编程总结linux网络编程中两个重要的高级编程函数:fcntl和select函数原型如下:1、int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);2、int fcntl(int fd , int cmd);int fc
·
linux 网络编程总结
linux网络编程中两个重要的高级编程函数:fcntl和select
函数原型如下:
1、int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
2、
int fcntl(int fd , int cmd);
int fcntl(int fd,int cmd,long arg);
int fcntl(int fd,int cmd,struct flock * lock);
函数1:select
是为了支持网络中多IO机制,也就是所说的并发处理,n是进程创建的最大文件描述符+1,参数readfds、writefds 和exceptfds 称为描述词组,表示文件描述符的各种状态;timeout超时时间值,如果在轮询中超过时间,将检测另一个描述符,一般情况下,select还与下面一些函数共同使用,来检测各个文件描述符的状态改变:
FD_ZERO(fd_set *fdset):清空fdset与所有文件描述符的联系。
FD_SET(int fd, fd_set *fdset):建立文件描述符fd与fdset的联系。
FD_CLR(int fd, fd_set *fdset):清除文件描述符fd与fdset的联系。
FD_ISSET(int fd, fd_set *fdset):检查fd_set联系的文件描述符fd是否可读写,>0表示可读写。
返回值:如果为0,则表示说明在设定的时间内,socket的状态没有发生变化。
如果-1,这说明select函数出错;
如果其他情况,表明执行成功,检测到文件描述符状态变化。
函数2:fcntl
功能:用来操作文件描述词的一些特性。
参数说明:参数fd代表欲设置的文件描述词,参数cmd代表欲操作的指令。
返回值:成功,返回0,失败,返回-1
例子:下面表示设置套接字描述符sockfd的状态为非阻塞
fcntl( sockfd, F_SETFL, O_NONBLOCK);
// sockfd 是要改变状态的文件描述符.
// F_SETFL 表明要改变文件描述符的状态
// O_NONBLOCK 表示将文件描述符变为非阻塞的.
更多推荐
已为社区贡献2条内容
所有评论(0)