[eside-ghost] Lectura/escritura eficiente de ficheros en C

Perki Pat perki_pat5 en yahoo.es
Vie Ene 27 22:28:04 CET 2006


Perki Pat wrote:
>> 1) Función para averiguar tamaño de bloque, si falla, usar tamaño
>> estándar.
> 
> alguna sugerencia para hallar el tamaño? un tamaño por defecto? 4096?
> 
 > cómo saber en qué dispositivo están?

mediante lstat ser pueden resolver ambas cuestiones. lo que me queda por 
saber es un tamaño por defecto, por si falla la llamada a lstat (o stat 
o fstat)



#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	struct stat f_info[2];
	
	if(argc!=3) {
		fprintf(stderr,"Sintaxis: %s <src> <dst>\n",argv[0]);
		exit(EXIT_FAILURE);
	}
	
	if(-1==lstat(argv[1],&f_info[0])) {
		perror("Problemas con lstat(src)");
		exit(EXIT_FAILURE);
	}
	if(-1==lstat(argv[2],&f_info[1])) {
		perror("Problemas con lstat(dst)");
		exit(EXIT_FAILURE);
	}
	printf("Dispositivos:\n"
		"\tsrc: %Ld\tdst: %Ld\t%s\n",
		f_info[0].st_dev,
		f_info[1].st_dev,
		(f_info[0].st_dev==f_info[1].st_dev)?"Mismo dispositivo":"Distinto 
dispositivo");
	printf("Tamaño de bloque:\n"
		"\tsrc: %d\tdst: %d\n",
		f_info[0].st_blksize,
		f_info[1].st_blksize);
	
	/*Lo que nos interesaría es  f_info[0].st_blksize, que es de donde 
vamos a leer.
	Si tuviéramos algún problema con el lstat, habría que usar un valor por 
defecto*/
	
	exit(EXIT_SUCCESS);
}

/*Nota: dev_t es long long, al menos en linux 2.6, en otros sistemas me 
parece que es short. blksize_t no lo sé*/



Más información sobre la lista de distribución eside-ghost