Для получения сообщений от CGI, выполняющемся на сервере, я использую FIFO, содержимое которого периодически считывается другим CGI из xmlhttprequest'а. FIFO в основном CGI открывается так:
int file = open(FIFO_OUT, O_RDWR|O_NONBLOCK);
outfile = fdopen(file, "w+");
Считывающий сообщения CGI открывает FIFO так:
f = open(FIFO, O_RDONLY|O_NONBLOCK);
Но возникла проблема: часть данных, которая записывается в FIFO, когда из него никто не читает, просто теряется. Хотя, по идее, должна буферизоваться до следующего чтения.
Вопрос: как можно сделать нормальную буферизацию FIFO?
P.S. до этого я пытался сделать обмен информацией при помощи очередей сообщений, но здесь возникает проблема в ограничении общего объема сообщений и фиксированной их длине: если делаем сообщения достаточной длины, их получается около десятка; если же увеличить их количество, длина сообщений становится слишком маленькой.