🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Truncar un archivo con primitivas de C ?

#11324
From: Maeloc
Date: Sat, 08 Dec 2001 19:26
40 lines
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-mail

Show 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)