问下关于select函数的使用问题。。。。

发布于 2022-09-30 11:45:26 字数 1717 浏览 20 评论 0

本帖最后由 jun37213721 于 2011-04-11 22:48 编辑

为什么我用"w"方式打开文件,用FD_ISSET来测试是否可读,返回都是可读形式呢?

  1. int main()
  2. {
  3.     int fd;
  4.     FILE *fp;
  5.     fp = fopen("log", "w");//以写方式打开文件
  6.     fd = fileno(fp);
  7.     fd_set rsets;
  8.     fd_set wsets;
  9.    
  10.     FD_ZERO(&rsets);
  11.     FD_ZERO(&wsets);
  12.     FD_SET(fd, &rsets);
  13.     FD_SET(fd, &wsets);
  14.     select(fd + 1, &rsets, &wsets, NULL, 0);
  15.     if(FD_ISSET(fd, &rsets))
  16.     {   //不应该执行到这里才对啊,但确实进来了
  17.         printf("%d ready to read\n", fd);
  18.         char buf[10000];
  19.         fgets(buf, 10000, fp);//这里读不到数据
  20.         printf("%s\n", buf);//输出为空的
  21.     }   
  22.     if(FD_ISSET(fd, &wsets))
  23.     {   //正常执行
  24.         printf("%d ready to write\n", fd);
  25.         char *tmp = "haha, I can write\n";
  26.         write(fd, tmp, strlen(tmp));
  27.     }   
  28.     fclose(fp);
  29.     return 0;
  30. }

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北斗星光 2022-10-07 11:45:26

select返回的是文件是否准备好这个操作

对于一个常规文件,select会认为读写都行,而你实际读的时候才发现文件被读保护的

lz想试的话应该找管道或者重定向来玩

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文