LINUX.ORG.RU

Видимо, чтобы программер смог сам его обработать.

kpanic ★★
()

Эээ.

И что, по твоему, должно быть написано в обработчике? Если б обрабатывала - это был бы fucking magick, с которым приходилось бы бороться...

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

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

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

;-)

ты немного не понял вопроса - вопрос в концепции а не в реализачии...

а как перехватывать и обрабатывать сигналы я выучил ещё до того как ты зарегался на сайте;-)

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

логика очень простая, берем программу которая печатает
в stdout и программу которая читает из stdin и соединяем их,

./program1 | ./program2

обычно писатели в stdout, результат write не проверяют,
(например, во многих программах вы видели чтобы
делали if (printf() != bla-bla) и так на каждую печать)

с другой стороны хочется чтобы если program2 по каким-то
причинам прекратила работу, program1 тоже бы завершилась незамедлительно,

поэтому SIGPIPE по умолчанию так обрабатывается,

и с glibc это никак не связано, так же будет и на любом другом
unix

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

>поэтому SIGPIPE по умолчанию так обрабатывается,

>и с glibc это никак не связано, так же будет и на любом другом unix

твои рассуждения в общем а не применительно к моему случаю, в часности popen()

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

Вобщем в линуксе не способа красиво разрулить ситуацию на пайпах.

В солярке кажись можно задавить мешающий сигнал через fcntl() на десрипторе пайпа.

в линуксе как вариант реализовать свою popen где вместо пайпов пользовать сокеты, например создаваемые socketpair(), ну и указывать флаг MSG_NOSIGNAL

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