Программа блока FIFO до прочтения другого процесса - PullRequest
0 голосов
/ 03 мая 2018

Я использую файл FIFO, созданный как mkfifo myFIFO на терминале Linux, в коде 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 голосов
/ 08 мая 2018

Лучший способ, который я нашел, это использовать опцию O_NONBLOCK, записать в файл / канал содержимое внутренней очереди программного обеспечения. Таким образом, буфер создается программой записи, а файл канала имеет функцию только канала сообщений.

0 голосов
/ 03 мая 2018

Вам нужно открыть свой FIFO в неблокирующем режиме. Для этого вместо fopen используйте ::open и укажите параметр O_NONBLOCK.

Вам также нужно будет использовать ::write вместо fprintf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...