read 读取 非常奇怪 而且有难度的问题
来源: 互联网 发布时间:2016-06-23
本文导语: 今天要用到FIFO,写了一个程序,但是read的时候 len = read ( fd, fifoBuf, sizeof(fifoBuf)); //-----------------如果写成这样就会阻塞在那里,不能继续读了。 len = read ( fd, fifoBuf, 1024);// --------------这么写就是正常...
今天要用到FIFO,写了一个程序,但是read的时候
len = read ( fd, fifoBuf, sizeof(fifoBuf)); //-----------------如果写成这样就会阻塞在那里,不能继续读了。
len = read ( fd, fifoBuf, 1024);// --------------这么写就是正常的
寻求高手解答
len = read ( fd, fifoBuf, sizeof(fifoBuf)); //-----------------如果写成这样就会阻塞在那里,不能继续读了。
len = read ( fd, fifoBuf, 1024);// --------------这么写就是正常的
寻求高手解答
|
呵呵,遇到过类似的问题,当时也没找到原因,reboot以后就没再出现过了。
|
这样改一下,看看结果
int nSize = sizeof(fifoBuf);
printf("nSize=%drn", nSize);
len = read (fd, fifoBuf, nSize);
int nSize = sizeof(fifoBuf);
printf("nSize=%drn", nSize);
len = read (fd, fifoBuf, nSize);
|
打开FIFO(即命名管道)的一个主要限制是,程序不能以O_RDWR模式打开FIFO文件进行读写操作,这样做的结果并未明确定义。这个限制其实是有道理的,因为我们通常使用FIFO只是为了单向传输数据,不需要使用O_RDWR模式。
要在程序之间双向传输数据,最好使用一对FIFO(或者使用一对普通管道),一个方向使用一个。
要在程序之间双向传输数据,最好使用一对FIFO(或者使用一对普通管道),一个方向使用一个。