我已经创建了一个 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的描述符)
不过我真的不喜欢,它看起来做作。有更好的方法吗?
通常,如果您没有使用 O_NONBLOCK 标志打开 fifo,则读取 block 直到数据可供读取。所以“ sleep (2);”声明是没有必要的。此外,“if(read > 0)”检查仍然需要,因为 fifo 的写入端已关闭或读取调用已返回,因为它已被信号 (errno = EINTR) 中断。
我是一名优秀的程序员,十分优秀!