#includemain(int argc,char **argv)
{
char r_buf[100];
int fd;
int r_size;
int ret_size;
r_size=atoi(argv[1]);
printf("requred real read bytes %d\n",r_size);
memset(r_buf,0,sizeof(r_buf));
fd=open("fi",O_RDONLY|O_NONBLOCK,0);
if(fd==-1)
{
printf("open %s for read error\n");
exit(1);
}
while(1)
{
memset(r_buf,0,sizeof(r_buf));
ret_size=read(fd,r_buf,r_size);
if(ret_size==-1)
if(errno==EAGAIN)
printf("no date avlaible\n");
printf("real read bytes %d\n",ret_size);
sleep(1);
}
pause();
unlink("fi");
}
里面的fifo路径要自己修改,不然要出错的!
编译:
gcc -o fifo fifo.c
gcc -o fiforead fiforead.c
测试:
现./fiforead xx
//xx为字节数
例如:
./fiforead 25
requred real read bytes 25
real read bytes 0
real read bytes 0
real read bytes 0
real read bytes 0
real read bytes 0
real read bytes 0
再./fifo
则显示:
real read bytes 0
real read bytes 25
real read bytes 25
real read bytes 25
real read bytes 25
real read bytes 0
也就是说fiforead等待fifo,也就是处于阻塞状态,当fifo运行了,就处于非阻塞状态了