#linux #linux-kernel #pipe
Вопрос:
Чтобы подробнее рассказать. Я знаю, что чтение из пустого канала по умолчанию является блокирующим вызовом. Вопрос в том, если
- Я создаю трубу.
- Я пытаюсь прочитать 1 байт из пустого канала в процессе 1 -gt; (это чтение ЗАБЛОКИРУЕТ процесс 1)
- Я записываю 1 байт в канал из другого процесса.
- считывание 1 байта из процесса 1 разблокирует.
- Я пытаюсь снова прочитать еще 1 байт в процессе 1 из канала -gt; (будет ли это чтение возвращать ноль или оно снова будет БЛОКИРОВАТЬСЯ, пока я снова не напишу в канал через другой процесс?)
Комментарии:
1. Вы имеете в виду названные трубы правильно? В любом случае, я рекомендую вам выполнить короткую тестовую программу, чтобы выяснить это. Часто встречаются неожиданности и особые случаи (примечание: вы также используете значение по умолчанию ). Выполнив этот короткий тест, вы также получите набор инструментов для решения дальнейших проблем (кэширование, сигналы и т.д.). Документация хорошая, но я доверяю ей только после явного тестирования.
2. Чтение с конца канала «чтение» не вернет 0, если канал не пуст и конец канала «запись» полностью закрыт (т. Е. Все оставшиеся дескрипторы для конца «запись» были закрыты).
3. @IanAbbott, не могли бы вы дать на это ответ? Я попробовал, и это работает так, как вы описали.