Article View: es.comp.os.linux.programacion
Article #1957Re: Cerrar un pipe mientras est� ejecut�ndose
From: Pascal Bourguignon
Date: Mon, 16 May 2005 21:24
Date: Mon, 16 May 2005 21:24
60 lines
3144 bytes
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-mailReferences:
<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