因为后两个是输出,所有不可能有任何数据给你读,标准输入中你也没有输入数据,所以也没有数据可读。所以只有那两个文件是有数据可读的,所以返回值为2,read_set中只有那两个文件的描述符。你可以试试这段代码。读取键盘输入值,超时间隔2.5秒,输出用户输入的字符个数 #include <sys/types.h> #include <sys/time....
voidFD_SET(intfd, fd_set *fdset);/*turn on the bit for fd in fdset*/ voidFD_CLR(intfd, fd_set *fdset);/*turn off the bit for fd in fdset*/ intFD_ISSET(intfd, fd_set *fdset);/*is the bit for fd on in fdset ?*/ select函数修改由指针readset,writeset,exceptionset所指...
maxfdp1:最大描述符+1,可设置为FD_SETSIZE(1024) writefds:可写描述符集 exceptfds:异常描述符集 tvptr:愿意等待的时间 NULL:永远等待,捕捉到信号则中断等待 时间每个字段为0:完全不等待,测试指定的文件描述符并立即返回 不为0:实际等待的时间 返回值: 返回-1:表示出错,文件描述符没有准备好时收到信号,...
我的意图是将这些信息传递给我自己的select(),然后在设置它们自己的fd值时将控制权返回给任何库。一、...
FD_SET(fd, &rset); tv.tv_sec = sec; tv.tv_usec =0;returnselect(fd +1, &rset,NULL,NULL, &tv);/* > 0 if descriptor is readable */} 以上函数的返回值就是select函数的返回值,出错返回-1,超时返回0,否则返回已就绪描述符的数目。
// FD_ISSET 这个宏判断 sockfd 是否属于可读的文件描述符 从标准输入读入, 输出到 sockfd 中去. } 重新设置 sockset. (即将 sockset 清空, 并将 sockfd 和 0 加入) } 下面看 server 的情况: 设置sockset 如下: FD_ZERO( sockset); FD_SET( sockfd, sockset); ...
fd_set *exceptfds,//其他要向我们通知的文件描述符 struct timeval *timeout )//超时设置。 timeout可选参数:NULL:一直阻塞,直到文件描述符就绪或出错,0:仅仅检测文件描述符集的状态,然后立即返回,非0:在指定时间内,若没事发生,则超时返回。 在我们调用select时进程会一直阻塞到有文件可以读或有文件可以写或超...
首先通过fd找到监听file。接着__sys_accept4_file int __sys_accept4_file(struct file *file, unsigned file_flags, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen, int flags, unsigned long nofile) { struct socket *sock, *newsock; struct file *newfile; int err, len,...
int dup(int oldfd); 功能:复制文件描述符,操作系统会从末的文件描述符中选择一个返回。 oldfd:被复制的文件描述符 int dup2(int oldfd, int newfd); 功能:复制指定的文件描述符,如果newfd已经被使用,则先关闭,再复制。 九、标准IO与系统IO比较 练习3:分别使用标准IO(文件读写open)比较系统IO(fopen等)...
4.write()函数:写信息到fd对应的文件中。5.lseek()函数:设置当前文件偏移量 SEEK_SET, SEEK_CUR, SEEK_END。lseek()只是将当前的偏移量记录在内核中,并不引起I/O操作。6.close()函数:关闭fd对应的描述符。7.dup(fd)函数:复制文件描述符, 返回值为系统当前可用的文件描述符最小值。dup2(fd, newFd):...