LINUX.ORG.RU

Как заблокироваться на чтении канала?


0

0

syslog пишет сообщения в пайп, мой демон их оттуда читает обычными fgets и т. п. Все хорошо, пока не остановится syslog - тогда в пайпе появляется бесконечный EOF, и демон занимает весь CPU.

Можно ли уснуть так, чтобы проснуться только при поступлении реальных данных (при перезапуске syslog)?

★★★★
Ответ на: комментарий от aol

Нет, а надо? Так написано у Стивенса и в манах:

Those listed in readfds will be watched to see if characters become available for reading (more precisely, to see if a read will not block; in particular, a file descriptor is also ready on end-of-file)

unsigned ★★★★
() автор топика
Ответ на: комментарий от unsigned

посмотри еще на ferror() ведь, когда от того конца пайпа отваливается сислог, получается «сломаная труба»? или анализируй errno..

aol ★★★★★
()
Ответ на: комментарий от aol

Да отвал syslog я и по EOF угадать могу, только что мне с этим дальше делать?

Единственное, что вижу - поллинг со sleep'ом.

unsigned ★★★★
() автор топика
Ответ на: комментарий от unsigned

наверное, да. поверхностный гуглинг указывает именно на такое решение...

aol ★★★★★
()
Ответ на: комментарий от unsigned

> Да отвал syslog я и по EOF угадать могу, только что мне с этим дальше делать?

Закрывай сокет (или какой там у тебя «канал») и открывай новый.

tailgunner ★★★★★
()
Ответ на: комментарий от koi8-r

INOTIFY у меня нет, а SIGPIPE приходит только писателю.

unsigned ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.