linux — неблокирующее открытие трубы в переполнении стека

Я должен открыть именованный fifo из сценария php, который должен записывать в fifo, но он не всегда может быть открыт для чтения. Сейчас я пользуюсь fopen, но он всегда блокируется, когда конец чтения fifo не открывается. Есть ли эквивалент UNIX int open(pname, O_WRONLY | O_NONBLOCK) в php, чтобы, когда fifo не открылся, немедленно вернуться?

0

Решение

Нет прямого эквивалента функции C, которую вы описываете. Но вы можете использовать:

fopen($pipename, "w+")

Операция вернется немедленно, потому что она получает доступ на чтение / запись к каналу, поэтому дескриптор чтения всегда будет открыт (открытие обычного доступа на запись канал заблокирует для читателя, чтобы открыть другой конец)

Примечание: обычно люди не хотят этого делать. Нет никакого способа узнать, действительно ли реальный читатель канала получил сообщение или нет. Это может привести к потере данных.

Именованные каналы лучше всего подходят для приложений, в которых можно гарантировать, что и пишущий и читающий работают параллельно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]