Article View: es.comp.os.linux.programacion
Article #11324Truncar un archivo con primitivas de C ?
From: Maeloc
Date: Sat, 08 Dec 2001 19:26
Date: Sat, 08 Dec 2001 19:26
40 lines
2590 bytes
2590 bytes
Hola!
estoy trasteando con las primitivas del sistema y pretendo truncar el tama�o de un archivo pasado a la funcion main junto con el nuevo tama�o como argumento de la linea de comando.
Si el nuevo tama�o es menor q el tama�o actual del fichero me gustaria imprimir por pantalla la parte truncada, y es ahi donde me encuentro el siguiente problema: no consigo q read me almacene en la cadena buffer los n-bytes truncados. A continuacion pongo el trozo de codigo q empleo:
int leidos;
char buffer[9999]; /* buffer esta definido */
/* Abro el fichero y duplico el descriptor */
fich=open(argv[1],O_RDWR | O_CREAT,0755);
fich2=dup(fich);
/*
* el tama�o del fichero lo obtengo convirtiendo a long el argumento
* y el tama�o del fichero viendo el valor q devuelve lseek al posicionar
* el puntero al final del archivo */
if( strtol(argv[2],NULL,10) < lseek(fich,0,SEEK_END) )
{
/* Pretendo q read lea de "fich" y almacene en la cadena "buffer" la cantidad
* de bytes correspondiente a la resta de las longitudes de los ficheros
* viejo y nuevo (es decir, el numero de bytes q se truncaran) */
/* Para ello, posiciono el descriptor fich2 al final del nuevo tama�o */
lseek(fich2,strtol(argv[2],NULL,10),SEEK_SET);
leidos=read(fich2,buffer,lseek(fich,0,SEEK_END)-strtol(argv[2],NULL,10));
}
/* Trunco el fichero */
ftruncate(fich, strtol(argv[2],NULL,10));
--------------
Pues bien, el programa hace "casi" todo. Trunca el fichero correctamente, pero NO almacena en buffer la cadena. Alguien ve el porq? Muchisimas gracias por la atencion prestada!!!
Maeloc
Technical Details
Message-ID:
<slrna14qcs.31a.maeloc@luthyen.maeloc.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!cm64004.red.mundo-r.COM!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f86c8,2e3430e7213dd0ba,start X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-12-08 11:26:52 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!fu-berlin.de!uni-berlin.de!cm64004.red.mundo-r.COM!not-for-mail From: Maeloc <maeloc@bigfoot.com> Newsgroups: es.comp.os.linux.programacion Subject: Truncar un archivo con primitivas de C ? Date: 8 Dec 2001 19:26:50 GMT Organization: Maeloc Digital Research Ltd. Lines: 40 Message-ID: <slrna14qcs.31a.maeloc@luthyen.maeloc.net> Reply-To: maeloc@bigfoot.com NNTP-Posting-Host: cm64004.red.mundo-r.com (213.60.64.4) Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Trace: fu-berlin.de 1007839610 11665664 213.60.64.4 (16 [64633]) User-Agent: slrn/0.9.7.3 (Linux)