- 论坛徽章:
- 0
|
code 如下,fifo的另一端我只执行了一次写入操作,然后下面的select就每次都返回1,为什么呢?:
#define FIFO "/tmp/myfifo"
main(int argc,char** argv)
{
char buf_r[100];
int fd, retval;
int nread;
fd_set rfds;
struct timeval tv;
if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
printf("cannot create fifoserver\n");
printf("Preparing for reading bytes...\n");
memset(buf_r,0,sizeof(buf_r));
fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
if(fd==-1)
{
perror("open");
exit(1);
}
while(1)
{
memset(buf_r,0,sizeof(buf_r));
tv.tv_sec = 60;
tv.tv_usec = 0;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd + 1, &rfds, NULL, NULL, &tv);
printf("retval:%d\n",retval);
if (retval == 0)
{
printf("timeout\n");
}
else
{
if((nread=read(fd,buf_r,100))==-1)
{
if(errno==EAGAIN)
printf("no data yet\n");
}
printf("read %s from FIFO\n",buf_r);
//sleep(1);
}
}
pause();
unlink(FIFO);
}
|
|