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