[英]FIFO block program until other process read
我在下面的C ++代码中使用一个FIFO文件,该文件在Linux终端上创建为mkfifo myFIFO
:
#include <iostream>
using namespace std;
#include <stdio.h>
int main(int argc, char** argv) {
FILE* fp = fopen("/tmp/myFIFO", "w");
fprintf(fp, "Hello, world!\n");
fclose(fp);
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}
该程序将保持阻塞状态,直到其他进程读取myFIFO
。 如何避免这种情况? (我希望代码的这种和平状态保持在FIFO中进行处理和写入,而不进行其他读取的过程。在FIFO满之前,如果可能的话,我可以丢弃最早的消息)。
我发现的最佳方法是使用O_NONBLOCK
选项,将文件的内部队列内容写入文件/管道。 因此,缓冲区是由编写器软件创建的,并且管道文件仅具有消息通道的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.