Я использую файл 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 не будет заполнен, когда, по возможности, я могу отказаться от самых старых сообщений).
Вам нужно открыть свой FIFO в неблокирующем режиме. Для этого используйте ::open
вместо fopen
и укажите O_NONBLOCK
вариант.
Вам также нужно будет использовать ::write
вместо fprintf
,
Лучший способ, который я нашел, был, используя O_NONBLOCK
опцию, записать в файл / канал содержимое внутренней очереди программного обеспечения. Таким образом, буфер создается программным обеспечением записи, а файл канала имеет функцию только канала сообщений.