在此处检查答案并在我的环境中运行它后,我发现代码仍然遇到与我的代码相同的问题。这个问题是,每当我有一个与此类似的输入文件时......
FILE A
|---------------------|
| ABCDE |
| abcde |
|---------------------|
我在目标文件中生成了额外的换行符空格。
FILE B
|---------------------|
| edcba |
| |
| EDCBA |
|---------------------|
调试我的代码后,我可以看到 '\n' 被复制到目标文件中两次,我想了解为什么 lseek 这样做。
附上我的代码。有问题的关键部分在 do/while 循环中。我很确定我的思考过程是正确的,因为我查找的这个答案中的代码会输出完全相同的结果。
#define CHAR_SIZE 2048
#define BUFF_SIZE 1
#define PERMS 0666
int main(int argc, char* argv[]){
if (argc < 3) {
return 1;
printf ("ERROR: not enough arguments\n");
}
int src_file = 0; int dest_file = 0;
int n = -1;
if((src_file=open(argv[1],O_RDONLY)) < -1) return 1;
if((dest_file = creat(argv[2], PERMS)) < -1) return 1;
printf ("The filesize is: %d\n", lseek(src_file, (off_t) 0, SEEK_END));
char buffer[BUFF_SIZE];
lseek (src_file,n--,SEEK_END);
do {
read(src_file,buffer,BUFF_SIZE);
printf ("%s", buffer);
write(dest_file,buffer,BUFF_SIZE);
}while (lseek (src_file,n--,SEEK_END) > -1);
printf("\n");
return 0;
}