Почему файл FIFO должен быть открыт для чтения перед открытием для записи?

Почему функция open() для FIFO в Unix это асимметрично? Зачем нам сначала открывать FIFO для чтения, а потом для записи? в linux/fs/fifo.c написано:

/*
 *  O_RDONLY
 *  POSIX.1 says that O_NONBLOCK means return with the FIFO
 *  opened, even when there is no process writing the FIFO.
 */

/********
 *  O_WRONLY
 *  POSIX.1 says that O_NONBLOCK means return -1 with
 *  errno=ENXIO when there is no process reading the FIFO.
 */

Почему мы не можем сначала открыть для записи, а потом для чтения?

1 ответ

Я предполагаю, что причина в том, что многие программы, которые должны оставаться на стороне чтения, также открывают ее для записи с явной целью избежать ошибки SIGPIPE/IO, когда клиент закрывает свою сторону записи; Что касается ядра, то есть писатель, за исключением того, что он никогда не пишет, поэтому на практике чтение будет видеть блокирующее чтение.

Пример: clockspeed.c

Другие вопросы по тегам