Page 165
Write a program to compare two files, printing the first line where they differ.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LINE 1000
int main(int argc, char *argv[])
{
if (argc != 3) {
puts("error: exactly two file names must be provided");
return 1;
}
char *fn1 = argv[1];
char *fn2 = argv[2];
FILE *fp1 = fopen(fn1, "r");
FILE *fp2 = fopen(fn2, "r");
if (fp1 == NULL) {
printf("error: unable to read %s\n", fn1);
return 2;
}
if (fp2 == NULL) {
printf("error: unable to read %s\n", fn2);
return 2;
}
char *line1 = (char *)malloc(sizeof(char) * MAX_LINE);
char *line2 = (char *)malloc(sizeof(char) * MAX_LINE);
int line_num = 0;
do {
++line_num;
line1 = fgets(line1, MAX_LINE, fp1);
line2 = fgets(line2, MAX_LINE, fp2);
} while (line1 != NULL && line2 != NULL && strcmp(line1, line2) == 0);
if (line1 == NULL && line2 == NULL) {
puts("files do not differ");
} else {
printf("files differ at line %d\n", line_num);
if (line1 != NULL) {
puts(line1);
} else {
printf("end of file %s\n", fn1);
}
if (line2 != NULL) {
puts(line2);
} else {
printf("end of file %s\n", fn2);
}
}
}