繁体   English   中英

FIFO块程序,直到读取其他进程

[英]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满之前,如果可能的话,我可以丢弃最早的消息)。

您需要以非阻塞模式打开FIFO。 为此,使用::open而不是fopen ,并指定O_NONBLOCK选项。

您还需要使用::write代替fprintf

我发现的最佳方法是使用O_NONBLOCK选项,将文件的内部队列内容写入文件/管道。 因此,缓冲区是由编写器软件创建的,并且管道文件仅具有消息通道的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM