#include
#include
#include
#include
#include
#define BUFFERSIZE 4096
#define COPYMODE 0644
void oops(char *, char *);
int main(int ac, char *av[])
{
/* check args */
if(ac != 3)
{
fprintf(stderr, "usage: %s source destination\n", *av);
exit(1);
}
int in_fd_A, in_fd_B, n_chars;
/* open files */
if((in_fd_A = open(av[1], O_RDONLY)) == -1)
oops("Cannot open ", av[1]);
if((in_fd_B = open(av[2], O_RDONLY)) == -1)
oops("Cannot open ", av[2]);
/* compare files */
int same = 1;
char bufA[BUFFERSIZE] = {0};
char bufB[BUFFERSIZE] = {0};
while(1)
{
int readSizeA = read(in_fd_A, bufA, BUFFERSIZE);
int readSizeB = read(in_fd_B, bufB, BUFFERSIZE);
if(readSizeA == -1 || readSizeB == -1)
{
close(in_fd_A);
close(in_fd_B);
oops("read error ", "");
}
if(memcmp(bufA, bufB, BUFFERSIZE) != 0) // 두 버퍼가 같지 않으면
{
same = 0;
break;
}
if(readSizeA == 0 || readSizeB == 0) // 파일을 끝까지 읽었다면
break;
}
/* close files */
if (close(in_fd_A) == -1 || close(in_fd_B) == -1)
oops("Error closing files", "");
if(same == 0)
{
while(( n_chars = read(in_fd_A, bufA, BUFFERSIZE)) > 0)
if( write( in_fd_A, bufA, n_chars ) != n_chars )
oops("Write error to ", av[2] );
}
else
printf("두 파일의 내용은 같습니다.\n");
}
void oops(char *s1, char *s2)
{
fprintf(stderr, "Error: %s ", s1);
perror(s2);
exit(1);
}
두 파일이 다르면 내용이 덮어씌워져야 하는데 그냥 여전히 다릅니당...
뭐가문제인가요??
stdio.h unistd.h fcntl.h stdlib.h string.h
자세히 안봤는데 일단 둘다 read only로 열었는데??
자세히 봐주세여..ㅠㅠ COPYMODE로 바꿨는데 안대여 제발..ㅜ
그 밑 코드까지 마저 봤는데 write하기전에 파일을 닫았는데??