[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Concatenar al final de un fichero



On Fri, 5 Mar 1999, Hue-Bond wrote:

> On Thu, 4 Mar 1999, Antonio Castro wrote:
> >On Wed, 3 Mar 1999, Hue-Bond wrote:
> >
> >>          Bash (por  lo menos) cuando ve  el carácter '>', se  encarga de
> >>      abrir el archivo y  borrar todo lo que hay, así  que no se llenaría
> >>      el disco, simplemente se perdería el contenido de file3.
> >
> >Un fichero abierto para lectura puede ser borrado sin que afecte en
> >lo más mínimo al proceso que lo tiene abierto.
> 
>          Conviene matizar  el significado de  "borrar". Yo me  refería a
>      borrar el contenido del archivo, no el archivo en sí mismo.
> 
> 
> >Parece extraño pero es
> >así (pruebalo).
> 
>          Pues no  sé no sé.  Copié ~/Mail/bugtraq a  ~/Mail/bugtrack, lo
>      abrí con el pine, leí un par de mensajes, borré el archivo con rm y
>      pude leer otro par de mensajes.  Me fui a /proc/<pine_pid>/fd/ y vi
>      que no había ningún descriptor abierto para bugtrack (tampoco sé si
>      lo hay en  condiciones normales). Volví a la consola  del pine y ya
>      no pude leer más artículos.
> 
>          Probé también con  borrar parte de bugtrack con el  joe, y pine
>      lo detectó ("File shrank from xx to yy bytes, closing!").

Bueno esto es una cosa general de todos lo unix. En Linux no lo había
comprobado hasta hoy.

La prueba que tu has realizado no es la mejor porque no sabemos si esos
programas van abriendo y cerrando los ficheros según los usan, y además
puede haber diferencias si abres en modo solo lectura o en modo lectura
escritura.

He realizado una pruebecita que si funciona. Es muy sencilla pruebala.

Utilizo dos sesiones.

En la sesion 1 hago:
yes > /tmp/kk

Espero un tiempo prudencial para que me vaya metiendo en ese fichero
cantidad de lineas.  Interrumpo con Ctrl-C.
A mi en unos 20 segundos me ha metido unos 70Mbytes.

Ahora hago less /tmp/kk.
Esta claro que less no lee todo el fichero. Lo deja abierto despues de
leer la primera página.

Desde la sesion 2 hago:

wc /tmp/kk

Después de un ratito me informa que tiene 34.416.640 lineas.
Lo borro y compruebo que ya no esta.

rm /tmp/kk
ll /tmp/kk

Vuelvo a la primera sesión donde less lo tiene atrapado y hago
Ctrl-G. Less se queda un ratito leyendo ese fichero que ahora mismo 
está en el limbo para calcular el numero de total de lineas obteniendo 
la cifra correta de lineas que ya he mencionado.


> >En el momento que el proceso cierre el fichero el kernel 
> >liberará el espacio de disco.
> 
>          Pues yo creo que el archivo desapareció tan pronto lo borré yo,
>      sin esperar a cerrar el mailbox en pine.
> 
>          ¿Quizá estamos hablando de cosas distintas?

No es que tu prueba no es la mejor para ver eso.

> >La terminacion de la lectura depende del momemto en el que se encuentre
> >el fin de fichero y si el fichero que coincide con la salida es el último
> >de una lista de ellos cuando empiece a leerlo no estaría vacio.
> 
>          Creo que lo pillo tras leer 5 veces   :-)
> 
> 
> >cat file200Mbytes file5bytes > file5bytes
> 
>          Esto resultaría en un file5bytes de  400 Mb, no? Y además, como
>      digo en  mi anterior post,  el contenido de file5bytes  original se
>      perdería.
>          Mmmmm, 400 Mb o infinito...

Bueno cuando empieze a leer el file5bytes ya tiene 400 pero cuando lea los
400 le quedará otros 400 y asi siempre. Tu fijaté en el comportamiento de 
tail -f fichero. Cuando empieza a leerlo tiene un tamaño y cuando llega
al final no termina. Se queda esperando haciendo sucesivas lecturas
para detectar mas lineas cuando el fichero crezca. Los programas 
normales terminan porque lo normal es cerrar cuando encuentras el fin
del fichero pero si llegas al final y no cierras puedes seguir leyendo
cuando alguien añada informacion al fichero. El cat jamás alcanzaría
el final del fichero por eso sería infinito.

Mmmmmm eso creo.   :-)

Saludos.


> -- 
> Linux, como su propio nombre indica, es *el* sistema operativo. (Barbwired)
> 
> David Serrano <ctv.es@fserrano>   Linux Registered User no. 87069
>  http://come.to/Hue-Bond.world     In love with TuX. Linux 2.2.2
> PGP Public key at http://www.ctv.es/USERS/fserrano/pgp_pubkey.asc
> 
> 
> 
> 

---------------------------------------------------------------------------
En caso de contestar a la lista mandame copia personal.

        /\     /\  Los mas importantes desarrolladores de Bases de datos 
          \\W//    están portando sus productos a Linux. Porque crees tu
         _|0 0|_   que será ?    Yo creo que Linux es el futuro.
+-oOOO--(___o___)--OOOo--------------------------+ 
|  . . . . U U . . . . Antonio Castro Snurmacher |  
| http://slug.ctv.es/~acastro.    acastro@ctv.es |    
+()()()----------()()()--------------------------+  


Reply to: