为什么是-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
部分是反转字符的部分。由于每个read
1 个字符将文件位置向前移动一个字符,因此我们必须后退2 个字符才能向后前进。
假设文件只有 2 个字符长,内容为AB
:
AB
在您未在此处显示的部分代码的开头,文件指针位于文件末尾的前一位置,因此它指向B
.
|
v
AB
现在我们读取一个字符——B
被读取。上的文件指针fdin
前进到文件的末尾。
|
v
AB
如果我们向后寻找一个字符,我们将B
再次结束。但是如果我们向后寻找2 个字符,它将指向A
:
|
v
AB
B
然后我们首先阅读A
。
最后,当我们试图在文件开头之外寻找时,lseek
将返回(off_t)-1
表示错误条件,while
循环条件变为假并退出循环。