当前位置: 技术问答>linux和unix
关于select函数 IS_SET的问题
来源: 互联网 发布时间:2017-01-15
本文导语: IS_SET()宏究竟是干嘛的? while (FD_ISSET(fds[0],&setr) || FD_ISSET(fds[1],&setw)) { if ((select(maxfd + 1, &setr, &setw, NULL, &tv)) 0) { buf[count] = ''; printf("count = %d,read : %sn",count,buf); } else { perror("read file1")...
IS_SET()宏究竟是干嘛的?
while (FD_ISSET(fds[0],&setr) || FD_ISSET(fds[1],&setw)) {
if ((select(maxfd + 1, &setr, &setw, NULL, &tv)) 0) {
buf[count] = '';
printf("count = %d,read : %sn",count,buf);
} else {
perror("read file1");
}
}
if (FD_ISSET(fds[1],&setw)) { count = write(fds[1],buf,7);
if(count > 0) {
buf[count] = '';
printf("count=%d,write : %sn",count,buf);
} else {
perror("write file2");
}
sleep(5);
}
}
}
比如这段代码 两个if判断有没有的话对程序执行没有影响,那么ISSET究竟是干嘛的呢
求解!跪谢!!!
while (FD_ISSET(fds[0],&setr) || FD_ISSET(fds[1],&setw)) {
if ((select(maxfd + 1, &setr, &setw, NULL, &tv)) 0) {
buf[count] = '';
printf("count = %d,read : %sn",count,buf);
} else {
perror("read file1");
}
}
if (FD_ISSET(fds[1],&setw)) { count = write(fds[1],buf,7);
if(count > 0) {
buf[count] = '';
printf("count=%d,write : %sn",count,buf);
} else {
perror("write file2");
}
sleep(5);
}
}
}
比如这段代码 两个if判断有没有的话对程序执行没有影响,那么ISSET究竟是干嘛的呢
求解!跪谢!!!
|
用以判断那个描述符是否有事件发生
|
select会修改rset和wset,select返回之后你去FD_ISSET检查你的描述符是否在rset/wset里,就知道是否发生了什么。
|
+1
有变化的描述符会在rset和wset中,表示有读写。用这个宏方便判断
|
FD_ZERO(fd_set *set)----清除一个文件描述符集;
FD_SET(int fd,fd_set *set)----将一个文件描述符加入文件描述符集中;
FD_CLR(int fd,fd_set *set)----将一个文件描述符从文件描述符集中清除;
FD_ISSET(int fd,fd_set *set)----试判断是否文件描述符被置位
FD_SET(int fd,fd_set *set)----将一个文件描述符加入文件描述符集中;
FD_CLR(int fd,fd_set *set)----将一个文件描述符从文件描述符集中清除;
FD_ISSET(int fd,fd_set *set)----试判断是否文件描述符被置位
|
是文件描述符,不是文件。
如果一个fd是针对一个普通文件的,那么它永远可读永远可写。
如果一个fd是针对一个普通文件的,那么它永远可读永远可写。