1

为什么是-2而不是-1?这是代码的一部分,它必须将一个字符串从一个文件反向写入另一个文件。你能帮我理解为什么它是-2而不是-1吗?

  while ( n >= 0)  {
       read(fdin, &c, 1);
       write(fdout, &c, 1);
       n=lseek(fdin,-2,SEEK_CUR);
  }
4

1 回答 1

3

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循环条件变为假并退出循环。

于 2018-10-28T16:40:31.353 回答