首页 > 解决方案 > FIFO 块程序,直到其他进程读取

问题描述

我在mkfifo myFIFO下面的 C++ 代码中使用在 Linux 终端上创建的 FIFO 文件:

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

标签: c++mkfifo

解决方案


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

您还需要使用::write而不是fprintf.


推荐阅读