Я работаю над проектом C ++ в Linux, где две программы взаимодействуют по именованному каналу.
Теперь я хочу обнаружить в одной программе, если другая отключается от именованного канала.
Есть ли способ обнаружить отключение?
редактировать
Я открыл fifo в режиме O_RDWR — по этой причине select не реагировал на отключение. Теперь я открываю fifo с помощью (O_RDONLY | O_NDELAY) и все работает нормально.
Это так же, как в TCP / IP. Вы должны попытаться прочитать данные, если это не удается с 0, канал закрыт.
читать и читать:
Эти вызовы возвращают количество полученных байтов или -1, если произошла ошибка
произошло. Возвращаемое значение будет 0, когда узел выполнил
упорядоченное отключение.
Существует также SIGPIPE
сигнал. Он будет отправлен, когда вы попробуете написать на сломанную трубу — трубу без читателей.
Если read
на одном конце возвращается с 0 байтами, канал отключен.