У меня есть fifo, открытый как RDWR (для обмена процессами) и трубы (process-thread), как я могу понять, когда я достигаю пределов трубы или фикс? Когда я пытаюсь написать более 64 КБ, он просто ждет в write().c - понять, если труба/fifo заполнена
ответ
Вы должны использовать неблокируемому режим:
pipe2(fds, O_NONBLOCK);
Или, если вам нужно сделать это после того, как труба была создана:
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
Теперь, когда вы читаете или писать, и операция не может завершите немедленно, он вернется. Затем вы можете использовать select()
или poll()
, чтобы узнать, когда чтение или письмо возможно снова (или вы можете просто заняться-ждать).
И он вернет '-1' и установит' errno' в 'EAGAIN' - POSIX [' write() '] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html) говорит : _ Запрос на запись для {PIPE_BUF} или меньше байтов должен иметь следующий эффект: если в трубе имеется достаточное пространство, write() передает все данные и возвращает количество запрошенных байтов. В противном случае write() не передает данные и возвращает -1 с errno, установленным в [EAGAIN] ._ –
Я должен отметить, что приведенное выше описание относится к каналу или FIFO с установленным флагом 'O_NONBLOCK' - прочитайте остальную часть спецификация поведения при других обстоятельствах. –
- 1. Регистрация формы, если форма заполнена
- 2. Подсчитайте, если ячейка не заполнена
- 3. Запретить патч, если область уже заполнена
- 4. Вывести файл ТОЛЬКО, если таблица заполнена
- 5. C не может понять, если заявление
- 6. Что произойдет, если память стека будет заполнена
- 7. PostgreSQL - проверить, если строка полностью заполнена
- 8. Что произойдет, если очередь ExecutorService заполнена
- 9. resultSet.next() возвращает false, даже если таблица заполнена
- 10. Удаление переменной, если она не заполнена
- 11. Как проверить php, если форма заполнена
- 12. Рассчитать среднее значение, если ячейка не заполнена
- 13. Python os.rename, если файловая система заполнена
- 14. Когда очередь заполнена?
- 15. Сохраненная процедура PL SQL Если строка не заполнена
- 16. Возможно ли вернуть ResultSet.next() пустой, даже если база данных заполнена?
- 17. Понять Objective-C runtime
- 18. Попытка понять препроцессор C
- 19. UDP приемная очередь заполнена?
- 20. Анкета участника заполнена
- 21. oembed ссылка заполнена «неопределенными»
- 22. Base64 Строка не заполнена
- 23. Проверка полей профиля заполнена
- 24. Помогите понять оптимизацию C#
- 25. excel - если ячейка не заполнена, то оператор IF
- 26. SQL Server - получить максимальные значения, если предыдущая дата не заполнена
- 27. run.google.script только в том случае, если форма заполнена
- 28. Удалите строки, если ячейка в столбце B заполнена красным цветом
- 29. Имейте переключатель Excel в следующую строку, если первая строка заполнена
- 30. Подтвердите оповещение при отправке страницы, если форма заполнена
Это как трубы работают. Если труба заполняется, когда вы пишете на нее, 'write' будет блокироваться до тех пор, пока данные не будут удалены из трубы. –
Откройте неблокирование и проверьте результат 'write'. – Olaf