FIFO写满之后的问题
在我测试的linux机器上,FIFO的容量是64K。建了一个FIFO(mkfifo,非阻塞方式)之后,write很多次直至满。此时去读一次FIFO,理论上,读了一条记录出来,就会空出至少一条记录的空间,这时候我再尝试write的话,应该成功。
实际情况却不是这样的:假如在此前write的时候,每次比如写入500字节的记录;当读取了一次之后,再尝试写入依然失败。于是在一个loop中,再读一条,再尝试写一次,如此连续8次,第9次才能够写入成功。此前已经一共读取了8次,也就是读了大约4K的字节出来。为什么会这样?
附加信息1:如果第一次读取之后尝试写入的时候,写入的不是500字节,而是很小的数目比如说2字节,那么就直接写入成功了。
附加信息2:4K正好是内存的一个页面大小……有关联么?
由于是用C做的测试,所以就发这来了。如果有更合适的版面,麻烦版主劳力移过去。