Почему файл 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