Именованные каналы — буферизация и блокировкаLinux

Ответить Пред. темаСлед. тема
Anonymous
 Именованные каналы — буферизация и блокировка

Сообщение Anonymous »

Может кто-нибудь прояснить поведение именованных каналов (особенно в Linux) в отношении буферизации и блокировки данных.

Код: Выделить всё

mkfifo pipe1

cat pipe1 # blocks until another process sends data

echo "hi" > pipe1 # running this in the other tty unblocks waiting "cat"
и наоборот (предположительно это можно было запустить после предыдущего эксперимента на том же канале):

Код: Выделить всё

echo "ping" > pipe1 # blocks, seemingly until another process reads the data

cat pipe1 # unblocks the "echo" above, if run from another tty
Оба примера блокируются до тех пор, пока «другой конец» не будет прочитан/записан — или пока другой конец вообще не будет открыт?Имеет ли канал внутренний буфер (чтобы дальнейшая запись могла выполняться без блока)?
Если процесс на конце «чтения» завершается, пока некоторые данные были еще не израсходованы из канала (или процесс «записи» отправляет еще немного перед завершением) – появятся ли эти дополнительные данные, когда следующий процесс чтения откроет канал?
Появимся ли мы распознать какой-то EOF на конце чтения, когда процесс записи завершается и мы потребляем все созданные им данные (хотя позже мы можем повторно использовать канал, записывая в него из другого процесса)?
Извините, если вопросы не совсем актуальны из-за непонимания механизма. Пожалуйста, не стесняйтесь просто предоставить ссылку на дополнительную документацию.


Подробнее здесь: https://stackoverflow.com/questions/789 ... d-blocking
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»