#include <sys/select.h>
	int select(int nfds, fd_set *readfds, fd_set *writefds,
                fd_set *exceptfds, struct timeval *timeout);
    /*
	参数:
		nfds:		要监视的最大文件描述符+1
	
		readfds:	要监视的读文件描述符集合 不关心可以传NULL
	
		writefds:	要监视的写文件描述集合 不关心可以传NULL
	
		exceptfds:	要监视的异常文件描述符集合 不关心可以传NULL
	
		timeout超时时间 如果设置成NULL 会一直阻塞 直到有文件描述符就绪
					
	返回值:
	
		成功 就绪文件描述符的个数
	
		超时 0
	
		失败 -1 重置错误码
	 */
	 				//struct timeval  可以指定超时时间

				    //如果结构体的两个成员都为0 表示阻塞
				    
				    struct timeval {
				        long    tv_sec;         //秒 
				        long    tv_usec;       //微秒
				    };
				    
		void FD_CLR(int fd, fd_set *set);	//将文件描述符在集合删除
		
		int  FD_ISSET(int fd, fd_set *set);	//判断文件描述符是否还在集合
							// 返回0 表示不在了 非0 表示
		void FD_SET(int fd, fd_set *set);	//向集合添加一个文件描述符
		
		void FD_ZERO(fd_set *set);			//清空集合

	#include <poll.h&gt;
	int poll(struct pollfd *fds, nfds_t nfds, int timeout);
	/*
	参数:
	
		fds:要监视的文件描述符的集合指向自定义结构数据
		
		nfds:fds中已经使用项目个数
		
		timeout:超时时间单位毫秒  
		
				设置成10000 表示10s
				
				-1	永久阻塞
				
				0	非阻塞
	返回值:
	
		0		超时
		-1		出错 重置错误码
		正数	成功 返回的就绪的文件描述符的个数
	*/
			struct pollfd {
			   int   fd;         /* 文件描述符 设置成-1 内核就不再监视这一位了*/
			   short events;     /* 要监视的事件 */
			   short revents;    /* 返回事件 */
			};
			/*
			要监视的事件是用位运算或起来的
			
			要监视的事件放在events字段,而实际就绪的事件revents字段返回
			
			POLLIN	读事件
			
			POLLOUT	写时间
			
			POLLERR	异常事件
			*/

	#include <sys/epoll.h&gt;
	int epoll_create(int size);
	/*
	功能创建epoll/创建epoll实例的描述符
	
	参数size:参数已经被忽略了,只需要填写大于0的值即可
	
	返回值epoll_create 调用成功时会返回一个非负整数epfd,
    
        表示新创建的 epoll 实例的文件描述符,
    
        如果调用失败则返回 -1,并设置 errno 变量以指示具体错误原因
     */
	int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
	/*
	参数:
	         epfd:epoll的文件描述符
	
	         op:控制方式
	
	            EPOLL_CTL_ADD:添加
	
	            EPOLL_CTL_MOD:修改
	
	            EPOLL_CTL_DEL:删除
	
	         fd:被操作的文件描述符
	
	         event:(事件)结构指针
	          
	
	返回值:    
				成功返回0,
	
	            失败返回-1 置位错误码
	 */
  • 等待文件描述符中的事件是否就绪,成功则返回就绪的文件描述符的个数(epoll_wait函数):
  • epoll_wait函数:
	int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);
	/*
	参数:

		    epfd:epoll的文件描述符
		
		    events:准备好的事件的结构地址
		
		    maxevents:返回的最大的文件描述符的个数
		
		    timeout:超时
		
		        &gt;0 :毫秒级别的超时时间
		
		        =0 :立即返回
		
		        =-1:不关心超时时间
	返回值:
	
		     成功返回准备好的文件描述符的个数
		
		     返回0代表超时时间到了
		
		     失败返回-1置位错误码
	*/

原文地址:https://blog.csdn.net/qq_41878292/article/details/134751450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30806.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注