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

时间:2018-05-03 12:50:13

标签: c++ mkfifo

我使用的是一个FIFO文件,在Linux终端上以mkfifo myFIFO创建,使用的是C ++代码:

#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满,如果可能的话,我可以丢弃最旧的消息。)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我找到的最好的方法是,使用O_NONBLOCK选项,在文件/管道中写入软件内部队列的内容。因此缓冲区由编写器软件创建,管道文件只具有消息通道的功能。