🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Funcionamiento de pipes

#12923
From: Liman
Date: Thu, 26 Apr 2001 14:01
76 lines
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-mail
References: <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