domingo, 18 de julio de 2010

Comparacion de dos archivos

Cuando se quiere comparar dos archivos del mismo tamaño y el resultado de la comparacion grabarlo en algun archivo se puede implementar algun programa en C para realizar esta funcion.
El programa que se muestra acontinuacion permite comparar 2 archivos y la diferencia es decir toda aquella informacion que no esta presente en alguno de estos 2 archivos se graba en otro.
Su modo de uso es el siguiente:
./comparar_archivos archivo_uno_a_comparar archivo_dos_a_comparar archivo_diferencia

"archivo_diferencia" es donde se grabara todos los bits diferentes entre ambos archivos.

/*-----------comparar_archivos.c----------------*/

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


int main(int argc, char *argv[])
{
int fd,fdB,fdC,x,y;
char *fila_uno, *fila_dos,*fila_nueva;
struct stat sbuf;
int z;
char c[1];
char cc[1];

if (argc != 4) {
fprintf(stderr, "usar: programa fila_uno fila_dos fichero_a_crear\n");
exit(1);
}
fila_uno=argv[1];
fila_dos=argv[2];
fila_nueva=argv[3];

if ((fd = open(fila_uno,O_RDONLY )) == -1) {
perror("open fila_uno");
exit(1);
}

if ((fdB = open(fila_dos,O_RDONLY)) == -1) {
perror("open fila_dos");
exit(1);
}

if ((fdC = open(fila_nueva, O_RDWR | O_CREAT)) == -1) {
perror("open fila_nueva");
exit(1);
}

if (stat(fila_uno, &sbuf) == -1) {
perror("stat");
exit(1);
}

for(x=0;x<(sbuf.st_size);x++)
{
z=lseek(fd,x,SEEK_SET);
y=lseek(fdB,x,SEEK_SET);
read(fd,c,1);
read(fdB,cc,1);
if( *c!=*cc)
{
write(fdC,c,1);
}
}
return 0;
}


/*----------------------------------------------*/

Compilar:
gcc -o comparar_archivos comparar_archivos.c

No hay comentarios:

Publicar un comentario