一个简单的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)
{
&