Article View: es.comp.os.linux.programacion
Article #12923Re: Funcionamiento de pipes
From: Liman
Date: Thu, 26 Apr 2001 14:01
Date: Thu, 26 Apr 2001 14:01
76 lines
4240 bytes
4240 bytes
"cesar m. redondo" escribió: > > Tengo un servidor concurrente que ejecuta dos programas que usan una > FIFO (pipe nombrada) para intercambiar inforamción entre ellos. Según > van llegando peticiones al servidor este va arrancando pares de > programas que crean su FIFO cada uno pero en todos estos pares de > programas la FIFO se llama igual que en los otros pares y el descriptor > devuelto para controlar la FIFO en todos los pares de programas es el > mismo, es como si todos usaran la misma FIFO puesto que en todos se > llama igual. Cuando haces un "ls" solo aparece una FIFO aunque haya 4 > pares de programas funcionando. > > La cuestión viene ahora y es que cuando uno de los pares de programas > termina cierra la FIFO, esta desaparece al hacer el "ls" pero los demás > pares de programas siguen funionando perfectamente. A mi este > funcionamiento me viene perfecto pero no entiendo porque es así, alguien > me puede explicar a que se debe este funcionamiento. > > Aclaraciones: > - una FIFO es igual que una pipe pero para intercambiar información > entre procesos sin relación padre-hijo. > - cuando cierro la FIFO lo hago con: > unlink(nombre_fifo); > close(descriptor_fifo); > > Muchas gracias y un saludo. > > --------------------------------------------------- > Tírate por un precipicio: 1 millón de Lemmings no pueden equivocarse. > Cuatro de cada cinco personas piensan que el quinto es imbécil. Unlink lo que hace es decrementar la cuenta de usuarios de ese descriptor de archivos, pero el kernel no borra el archivo hasta que esa cuenta desciende hasta cero. Es normal que el descriptor (sea fifo, pipe, socket o archivo normal) desaparezca de la estructura de archivos. Puedes hacer una prueba creando un archivo a mano, escribiendo un programa que lo abre y se queda ahí esperando hasta que pulses una tecla. Mientras el programa espera, te vas a una consola y borras el archivo con "rm", verás que el archivo desaparece, pero tu programa sigue pudiendo leer y escribir el archivo. Ese archivo desaparecerá del sistema cuando tu programa se cierre, porque la cuenta de enlaces no está a cero hasta que el último usuario que lo mantiene abierto lo cierre. De hecho, así funciona uno de los sistemas de creación de archivos temporales de Linux. Linux crea un archivo con un nombre que no existe, y ¿como garantiza que eso no va a interferir en otros programas?, hace una copia del descriptor, lo pasa a tu programa y después hace un unlink, con lo cual borra el nombre del archivo del sistema de archivos, garantizando que no interferirá en otros programas, por que el _nombre_ de archivo usado ya _no_ está usado. Además, cuando tu programa cierra el descriptor, la cuenta desciende a cero y el fichero es eliminado automáticamente si que tú tengas que preocuparte de ello. Mirate "man unlink", está muy claro escrito en las ocho primeras líneas. Lo que dice es que unlink borra _un nombre_, no un archivo. -- Liman - liman@bad-adn.com
Technical Details
Message-ID:
<3AE82A34.1A5AF5BA@bad-adn.com>Path:
arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!213.56.195.71!fr.usenet-edu.net!usenet-edu.net!jussieu.fr!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mailReferences:
<3AE7CC97.3930192D@mad.tecsidel.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,581a95f4c53d25f6 X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-04-26 07:03:33 PST Path: arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!news.tele.dk!213.56.195.71!fr.usenet-edu.net!usenet-edu.net!jussieu.fr!news.rediris.es!newsfeed.mad.ttd.net!telenews.teleline.es!not-for-mail Message-ID: <3AE82A34.1A5AF5BA@bad-adn.com> From: Liman <liman@bad-adn.com> X-Mailer: Mozilla 4.76 [es] (X11; U; Linux 2.4.0-64GB-SMP i686) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: es.comp.os.linux.programacion Subject: Re: Funcionamiento de pipes References: <3AE7CC97.3930192D@mad.tecsidel.es> Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Lines: 76 Date: Thu, 26 Apr 2001 14:01:25 GMT NNTP-Posting-Host: 213.4.91.44 X-Complaints-To: usenet@teleline.es X-Trace: telenews.teleline.es 988293685 213.4.91.44 (Thu, 26 Apr 2001 16:01:25 MET DST) NNTP-Posting-Date: Thu, 26 Apr 2001 16:01:25 MET DST Organization: Clientes_Teleline