🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #1957

Re: Cerrar un pipe mientras est� ejecut�ndose

#1957
From: Pascal Bourguignon
Date: Mon, 16 May 2005 21:24
60 lines
3144 bytes
David Lago <dlago@mundo-r.com> writes:

> Buenas a todos,
>
> Estoy haciendo una funci�n que detecta si hay o no un CD insertado en la
> unidad. Para ello captura la salida del comando:
>
> cdrdao disk-info --device ATA:1,1,0 2>&1
>
>
> Que viene siendo algo como esto:
>
> Cdrdao version 1.1.9 - (C) Andreas Mueller <andreas@daneb.de>
>   SCSI interface library - (C) Joerg Schilling
>   Paranoia DAE library - (C) Monty
>
> Check http://cdrdao.sourceforge.net/drives.html#dt for current driver
> tables.
>
> Using libscg version 'schily-0.8'
>
> ATA:1,1,0: HL-DT-ST DVD+RW GCA-4040N    Rev: 1.02
> Using driver: Generic SCSI-3/MMC - Version 2.0 (options 0x0000)
>
> WARNING: Unit not ready, still trying...
>
>
> Lo que hago es saltarme las primeras lineas, y si la siguiente empieza
> por WARNING, salgo de la funci�n devolviendo un valor que indique la
> ausencia de CD en la unidad. El caso es que antes de salir hago un
> pclose(...), y como el comando del pipe todav�a no ha terminado (siguen
> saliendo WARNINGs hasta que insertas un CD), se rompe la tuber�a con
> este error:
>
> sh: line 1:  2531 Tuber�a rota cdrdao disk-info --device ATA:1,1,0 2>&1
>
>
> En principio me da igual que se cierre a lo bestia. Lo que no me gusta
> es que la salida de mi programa se ve "ensuciada" por esta linea, y
> parece que hay un error, cuando es normal. Mi pregunta es: �hay alguna
> manera de cerrar "educadamente" una pipe cuando el programa que invoca
> todav�a no ha terminado? y si no se puede �c�mo me libro de este mensaje
> de error para que no salga por pantalla?

Aver �c�mo has establecido este pipe?  Aqu� parece que es el shell
quien lo ha hecho.  Entonces no es sorpredente que se queje.

Si creas t� mismo las tuberias, (pipe+fork+exec en lugar de popen),
entonces lo �nico que pasaria es que cdrdao recibir�a un SIGPIPE
cuando trata de escribir m�s datos en el pipe.  Si no procesa este
signal entonces sera matado sin m�s (es posible que le procese y que
imprime entonces un mensaje, pero poco probable).



-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
The rule for today:
Touch my tail, I shred your hand.
New rule tomorrow.
Technical Details
Message-ID: <87sm0mzwx4.fsf@thalassa.informatimago.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news.glorb.com!easynet-quince!easynet.net!easynet-post2!not-for-mail
References: <d6atn0$pda19@cesio.mundo-r.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,7f474458e893d6bc
X-Google-Attributes: gidf86c8,public
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news.glorb.com!easynet-quince!easynet.net!easynet-post2!not-for-mail
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Cerrar un pipe mientras est� ejecut�ndose
References: <d6atn0$pda19@cesio.mundo-r.com>
From: Pascal Bourguignon <pjb@informatimago.com>
Date: Mon, 16 May 2005 23:24:39 +0200
Message-ID: <87sm0mzwx4.fsf@thalassa.informatimago.com>
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)
Cancel-Lock: sha1:yoVs6jeI87g3h6UAF1HxkZMdYp0=
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
Lines: 60
Organization: [posted via Easynet Spain]
NNTP-Posting-Host: 62.93.174.79
X-Trace: DXC=DHVXE12M^c4G:gMal629\3_51]<;N?4W1bBd4DjF1d]1