首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

管道读取时不阻塞的有关问题

2012-05-20 
管道读取时不阻塞的问题创建了命名管道,一个读取,一个写入读取的部分,在open时阻塞,这个没问题这时,写入进

管道读取时不阻塞的问题
创建了命名管道,一个读取,一个写入
读取的部分,在open时阻塞,这个没问题
这时,写入进程向管道写入数据
读取进程继续执行,读到数据。
但,问题来了,读到一次数据之后,在没有数据的情况下,read不阻塞。
被逼无奈,添加了select,可它还是不阻塞
为什么呢?
求助!

C/C++ code
    cmdfd = open(WEBER_CMD_PIPE, O_RDONLY);    while(group.running)    {        timeout.tv_sec = 5;        timeout.tv_usec=0;        FD_ZERO(&rfds);        FD_SET(cmdfd, &rfds);        ret = select(cmdfd+1, &rfds, NULL, NULL, &timeout);        if (ret == -1)            perror("select()");        else if (ret)        {            Printf("ret: %d\n",ret);            if (FD_ISSET(cmdfd, &rfds) )            {                printf("Data is available now.\n");                ret = read(cmdfd, cmd, MAX_CMD_LEN);                //ret = fgets(cmd,MAX_CMD_LEN,cmdfd);                //ret = 10;                if (ret > 0)                {                    Printf("cmdlen: %d,cmd:\n%s", ret, cmd);                    jv_cmd_system(cmd);                }            }        }        else            printf("timeout.: %d, %s\n",ret,strerror(errno));    }


[解决办法]
C/C++ code
flag = fcntl(cmdfd, F_GETFL, 0);flag &= ~O_NONBLOCK;fcntl(cmdfd, F_SETFL, flag); 

热点排行