select函数为什么不阻塞 想不明白

qjzrd 2011-11-04 10:56:32
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
int filed;
int i = 0;
int max = 0;
filed = open("2.cc", O_RDONLY);
if(-1 == filed)
{
fprintf(stderr, "111111");
return -1;
}

max = filed;
fd_set writeset;//longÀàÐ͵ÄÊýÖé
FD_ZERO(&writeset);
FD_SET(filed, &writeset);
int s;
while(1)
{
s=select(filed + 1, NULL, &writeset, NULL, NULL);
if(s == -1)
{
fprintf(stderr, "s ³ö´íÎóÀ­");
}
if(i == 5)
{
//break;
}

if(FD_ISSET(filed, &writeset))
{
++i;
fprintf(stderr, "i: %d\n", i);
}
}


close(filed);
}
//g++ 3.cc -o 3

为什么不阻塞?想不明白
...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vincent_Song 2011-11-04
  • 打赏
  • 举报
回复
你想让他阻塞?
qq120848369 2011-11-04
  • 打赏
  • 举报
回复
还有,注意select返回后重新设置writeset,这个和epoll可不一样.
qq120848369 2011-11-04
  • 打赏
  • 举报
回复
这个你要问问select的实现为什么认为一个RDONLY的文件是可写的。
yujie_v 2011-11-04
  • 打赏
  • 举报
回复
select本来就不是阻塞的,实现问题而已。
luciferisnotsatan 2011-11-04
  • 打赏
  • 举报
回复

if(FD_ISSET(filed, &writeset))
进了这个if?
qjzrd 2011-11-04
  • 打赏
  • 举报
回复
我是只读方式打开 我在监视它能不能写 按道理不是阻塞了吗?

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧