В моем приложении я использую Linux Named Pipe для потоковой передачи данных. Одно приложение (app1) записывает потоковые данные в этот FIFO, а другое приложение (app2) читает из него.
Когда размер FIFO заполнен, частичная запись будет записана в FIFO из app1, так как размер буфера канала (4096 байт) заполнен. При этом записи сливаются с какой-то другой записью. Итак, I want to know what is the remaining size in pipe buffer
, прежде чем писать запись. При этом я могу сравнить текущий размер записи с оставшимся размером в буфере конвейера. Если размер записи больше, то App1 будет ждать и записывать полную запись всякий раз, когда канал освобождается, поскольку App2 будет непрерывно читать. Я пытался использовать это, но бесполезно:
fcntl(fd, F_GETPIPE_SZ );
Также есть ли способ проверить размер буфера этого оставшегося канала с помощью C или C++?
FIONREAD
не будет надежно работать при определении того, будет ли ваша предполагаемая запись успешной, по ряду причин. - person Sam Varshavchik   schedule 08.12.2018