gpt4 book ai didi

linux - 在linux(C linux)中无需忙等待即可收听fifo

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:51 25 4
gpt4 key购买 nike

我已经创建了一个 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) 中断。

关于linux - 在linux(C linux)中无需忙等待即可收听fifo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com