日期:2014-05-16  浏览次数:20665 次

一个简单的poll函数调用
书上说函数int   poll(struct   pollfd   *   fds,   int   numfds,   int   timeout);
1)如果当前可读写,返回读写信息。
2)如果当前不可读写,则阻塞进程,并等待驱动程序唤醒,重新调用poll函数,或超时返回。
但是我实验时却发现他并没有阻塞进程,不知道是为何?
源码如下:
#include   <fcntl.h>
#include   <stdio.h>
#include   <sys/poll.h>
#include   <unistd.h>

int   main(void)
{
                struct   pollfd   fds[2];
                char   buf[4096];
                int   i,rc;

                if((fds[0].fd=open( "p1 ",O_RDONLY   |   O_NONBLOCK)) <0)
                {
                                perror( "open   p1 ");
                                return   1;
                }
                if((fds[1].fd=open( "p2 ",O_RDONLY   |   O_NONBLOCK)) <0)
                {
                                perror( "open   p2 ");
                                return   1;
                }
                fds[0].events=POLLIN;
                fds[1].events=POLLIN;

                while(fds[0].events   ||   fds[1].events)
                {
                                if(poll(fds,2,0)==-1)
                                {
                                                perror( "poll ");
                                                return   1;
                                }
                                for(i=0;i <2;i++)
                                {
                                                if(fds[i].revents)
                                                {
&