Если 1 байт записывается в канал и этот 1 байт считывается из канала. Будет ли блокироваться другое чтение из этого канала или оно вернет ноль

#linux #linux-kernel #pipe

Вопрос:

Чтобы подробнее рассказать. Я знаю, что чтение из пустого канала по умолчанию является блокирующим вызовом. Вопрос в том, если

  1. Я создаю трубу.
  2. Я пытаюсь прочитать 1 байт из пустого канала в процессе 1 -gt; (это чтение ЗАБЛОКИРУЕТ процесс 1)
  3. Я записываю 1 байт в канал из другого процесса.
  4. считывание 1 байта из процесса 1 разблокирует.
  5. Я пытаюсь снова прочитать еще 1 байт в процессе 1 из канала -gt; (будет ли это чтение возвращать ноль или оно снова будет БЛОКИРОВАТЬСЯ, пока я снова не напишу в канал через другой процесс?)

Комментарии:

1. Вы имеете в виду названные трубы правильно? В любом случае, я рекомендую вам выполнить короткую тестовую программу, чтобы выяснить это. Часто встречаются неожиданности и особые случаи (примечание: вы также используете значение по умолчанию ). Выполнив этот короткий тест, вы также получите набор инструментов для решения дальнейших проблем (кэширование, сигналы и т.д.). Документация хорошая, но я доверяю ей только после явного тестирования.

2. Чтение с конца канала «чтение» не вернет 0, если канал не пуст и конец канала «запись» полностью закрыт (т. Е. Все оставшиеся дескрипторы для конца «запись» были закрыты).

3. @IanAbbott, не могли бы вы дать на это ответ? Я попробовал, и это работает так, как вы описали.