问下关于select函数的使用问题。。。。
本帖最后由 jun37213721 于 2011-04-11 22:48 编辑
为什么我用"w"方式打开文件,用FD_ISSET来测试是否可读,返回都是可读形式呢?
- int main()
- {
- int fd;
- FILE *fp;
- fp = fopen("log", "w");//以写方式打开文件
- fd = fileno(fp);
- fd_set rsets;
- fd_set wsets;
- FD_ZERO(&rsets);
- FD_ZERO(&wsets);
- FD_SET(fd, &rsets);
- FD_SET(fd, &wsets);
- select(fd + 1, &rsets, &wsets, NULL, 0);
- if(FD_ISSET(fd, &rsets))
- { //不应该执行到这里才对啊,但确实进来了
- printf("%d ready to read\n", fd);
- char buf[10000];
- fgets(buf, 10000, fp);//这里读不到数据
- printf("%s\n", buf);//输出为空的
- }
- if(FD_ISSET(fd, &wsets))
- { //正常执行
- printf("%d ready to write\n", fd);
- char *tmp = "haha, I can write\n";
- write(fd, tmp, strlen(tmp));
- }
- fclose(fp);
- return 0;
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
楼上正解
www.crazyhadoop.com
select返回的是文件是否准备好这个操作
对于一个常规文件,select会认为读写都行,而你实际读的时候才发现文件被读保护的
lz想试的话应该找管道或者重定向来玩