[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