我已经创建了一个FIFO(使用mkfifo()),我需要等到某个进程多次将数据写入其中。我已经写了以下代码:(忽略不好的风格,保持示例简明扼要)
int count = 0, read = 0;
while(count < 2) {
read = read(fd, buf, BUFFER_SIZE);
if(read > 0) {
//do work...
count++;
}
}
为了避免忙碌等待,我添加了以下内容:
int count = 0, read = 0;
while(count < 2) {
sleep(2);
read = read(fd, buf, BUFFER_SIZE);
if(read > 0) {
//do work...
count++;
}
}
(fd是FIFO的描述符)
然而我真的不喜欢它,它看起来很人为。有没有更好的方法呢?
答案 0 :(得分:0)
通常情况下,如果不打开带有O_NONBLOCK标志的fifo,则读取块直到数据可供读取。所以“睡觉(2);”声明没有必要。此外,仍然需要“if(read&gt; 0)”检查,因为fifo的写入结束已经关闭或者读取调用已经被返回,因为它已被信号中断(errno = EINTR)。