ここで回答を確認し、自分の環境で実行した後、コードがまだ自分のコードと同じ問題を抱えていることがわかりました。この問題は、これに似た入力ファイルがあるときはいつでも...
FILE A
|---------------------|
| ABCDE |
| abcde |
|---------------------|
宛先ファイルに余分な改行空白が生成されます。
FILE B
|---------------------|
| edcba |
| |
| EDCBA |
|---------------------|
コードをデバッグした後、'\n' が宛先ファイルに2 回コピーされていることがわかりました。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;
}