免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1829 | 回复: 6
打印 上一主题 下一主题

[函数] poll函数为什么不稳定阿? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-24 14:31 |只看该作者 |倒序浏览
我的代码如下:

/* polldemo.c*/
#include <stdio.h>
#include <stropts.h>
#include <poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
        int i, n,  fds[2];
        struct pollfd pfds[2];

        if (argc!=3)
        {
                fprintf(stderr, "use: polldemo File1 File2\n");
                exit(1);
        }
       
        for (i=0;i<2 ;i++ )
        {
                if ((fds[i]=open(argv[i+1],O_RDONLY))<0)
                {
                        perror(argv[i]);
                        exit(1);
                }
                else
                        printf("%s    fds[%d]= %d\n", argv[i+1],i, fds[i]);
        }
       
        for (i=0;i<2 ;i++ )
        {
                pfds[i].fd=fds[i];
                pfds[i].events=POLLIN;
        }

        n=poll(pfds, 2, 10*1000);
        switch(n){
                case -1:
                        perror("poll");
                case 0:
                        printf("\n Timeout expired.\n");
                        break;
                default:
                        printf("\n Data available     %d\n", n);
                       
        }
        return 0;
}
-----------------------------------------------
运行情况:  在 /dev/pts/0 上输入很快就有结果,但是在/dev/pts/1 上输入则有时有结果,有时没结果, 请问这是什么问题啊?
------------------------------------------------------------------------------------

[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Timeout expired.
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Data available     1
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Data available     1
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Data available     1
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Data available     1
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Data available     1
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4
sd

Data available     1
[wanglt@sz-gw fileOP]$ sd
bash: sd: command not found
[wanglt@sz-gw fileOP]$ polldemo /dev/pts/0 /dev/pts/1
/dev/pts/0    fds[0]= 3
/dev/pts/1    fds[1]= 4

Timeout expired.
[wanglt@sz-gw fileOP]$

论坛徽章:
0
2 [报告]
发表于 2006-05-24 14:35 |只看该作者
我登录的服务器是linux redhat 9
本机上使用ssh

论坛徽章:
0
3 [报告]
发表于 2006-05-24 15:20 |只看该作者
测试正常,

poll返回的是就绪的描述符“个数”,而不是描述符数组的索引下标。

论坛徽章:
0
4 [报告]
发表于 2006-05-24 16:53 |只看该作者
那请问为什么有时候会timeout返回0呢?

论坛徽章:
0
5 [报告]
发表于 2006-05-24 22:26 |只看该作者
原帖由 dell9 于 2006-5-24 16:53 发表
那请问为什么有时候会timeout返回0呢?


man poll --->
     return value of 0 indicates that the call timed out and no  file  descriptors
  have  been selected.

论坛徽章:
0
6 [报告]
发表于 2006-05-25 11:36 |只看该作者
原帖由 rwen2012 于 2006-5-24 22:26 发表


man poll --->
     return value of 0 indicates that the call timed out and no  file  descriptors
  have  been selected.


但是我一直在/dev/pts/1 中端输入阿?
另外  那个“就绪的”是什么意思? 我正在输入不算“就绪”吗?

论坛徽章:
0
7 [报告]
发表于 2006-05-25 12:31 |只看该作者
我在CentOS中测试pts/0,1,2,3均正常。
像你所说的情况,可能是什么原因导致了输入阻塞,不能确定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP