为什么是-2而不是-1?这是代码的一部分,它必须将一个字符串从一个文件反向写入另一个文件。你能帮我理解为什么它是-2而不是-1吗?
while ( n >= 0) {
read(fdin, &c, 1);
write(fdout, &c, 1);
n=lseek(fdin,-2,SEEK_CUR);
}
为什么是-2而不是-1?这是代码的一部分,它必须将一个字符串从一个文件反向写入另一个文件。你能帮我理解为什么它是-2而不是-1吗?
while ( n >= 0) {
read(fdin, &c, 1);
write(fdout, &c, 1);
n=lseek(fdin,-2,SEEK_CUR);
}
该read部分是反转字符的部分。由于每个read1 个字符将文件位置向前移动一个字符,因此我们必须后退2 个字符才能向后前进。
假设文件只有 2 个字符长,内容为AB:
AB
在您未在此处显示的部分代码的开头,文件指针位于文件末尾的前一位置,因此它指向B.
|
v
AB
现在我们读取一个字符——B被读取。上的文件指针fdin前进到文件的末尾。
|
v
AB
如果我们向后寻找一个字符,我们将B再次结束。但是如果我们向后寻找2 个字符,它将指向A:
|
v
AB
B然后我们首先阅读A。
最后,当我们试图在文件开头之外寻找时,lseek将返回(off_t)-1表示错误条件,while循环条件变为假并退出循环。