LINUX.ORG.RU

[c] [posix] Узнать, что pipe закрыт

 ,


0

0

Есть программа, которая пишет в pipe, и надо узнать, жив ли процесс на том конце, при этом ничего не отправляя туда.

Если он не жив, то при следующей операции write будет sigpipe, разумеется. Однако write с нулём байт не помогает. (Что в мане, собственно, написано).

man fcntl читал, но смог не прочитать нужного.

Неужели городить огород с select/poll?

★★★★

> Есть программа, которая пишет в pipe, и надо узнать, жив ли процесс на том конце

Зачем? Всегда веди себя так, будто приемный процецц жив, и лови SIGPIPE.

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

В том-то и дело, что это наиболее логичное поведение в большинстве случаев!

Велосипед следующий: делает truncate файлу, и одновременно выводит его содержимое в stdout -- предположительно, для случая "архив и содержимое не влезают на диск вместе". (Когда-то видел пару таких сообщений здесь и загорелся желанием написать на этот случай утилиту).

Соответственно, хотелось бы узнать про bad archive format до того, как мы начнём портить исходный файл.

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

Нихрена не понял, но вроде у тебя гонка. Или две.

tailgunner ★★★★★
()

> Неужели городить огород с select/poll?

хм, как же вы вообще без них справляетесь %) используйте poll и ловите, ЕМНИП, POLLHUP.

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

> Велосипед следующий: делает truncate файлу, и одновременно выводит его содержимое в stdout -- предположительно, для случая "архив и содержимое не влезают на диск вместе". (Когда-то видел пару таких сообщений здесь и загорелся желанием написать на этот случай утилиту).

нечего не понял, особенно в фразе «делает truncate файлу, и одновременно выводит его содержимое в stdout».

> Соответственно, хотелось бы узнать про bad archive format до того, как мы начнём портить исходный файл.

организовать однобайтный буфер и прочитать в него первый байт с архива, нэ? тогда и будете знать, хороший у архива формат, или плохой ;) причём здесь пайпы — не понятно, сложно что-то подсказать…

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

ИМХО, чтобы ваша утилита была действительно полезной, вам не только с select придётся заморочиться. А то ведь получиться, что если в этот момент другое приложение займет диск или будет перезагрузка системы и у вас будет испорчен исходный файл. Уж делайте тогда, что ваша программа сама сжимает кусок файла и перезаписывает его и всегда занает, где в файле сжатая информация, а где исходная.

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