Программа блока FIFO до прочтения другого процесса

Я использую файл 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 не будет заполнен, когда, по возможности, я могу отказаться от самых старых сообщений).

1

Решение

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

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

2

Другие решения

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

0

По вопросам рекламы [email protected]