为什么C文件流的开头称为“ SEEK_SET”?

时间:2019-06-03 19:20:45

标签: c file io

您可以在origin之类的函数中使用三个fseek常量来确定offset的计数位置:SEEK_SETSEEK_CUR和{ {1}}。 SEEK_ENDSEEK_CUR似乎很不明确,它表示文件流的当前位置和结尾,但是为什么SEEK_END被用来表示文件流的开头?为什么不像SEEK_SET这样的东西?

2 个答案:

答案 0 :(得分:4)

因为您可以添加偏移量。通过使用SEEK_SET,可以显式设置偏移量。 (通过将其添加到开头)

来自fseek的联机帮助页:

The new position, measured in bytes, is
obtained by adding offset bytes to the position specified by whence.
If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END, the offset is
relative to the start of the file, the current position indicator, or
end-of-file, respectively.

在lseek的联机帮助页中:

   SEEK_SET
          The file offset is set to offset bytes.

   SEEK_CUR
          The file offset is set to its current location plus offset
          bytes.

   SEEK_END
          The file offset is set to the size of the file plus offset
          bytes.

答案 1 :(得分:1)

上述问题的另一个答案是“因为fseek的第二个参数并不总是为零”。

如果 ,您始终将第二个参数传递为零,那么SEEK_CUR会将文件指针设置为其当前位置(这几乎是无用的否) -op),然后SEEK_END会将文件指针设置为文件末尾,而SEEK_CUR会将其设置为文件的开头,这可能使您想知道为什么未将其命名为{{ 1}}。

但是当然SEEK_BEG确实有第二个参数,并且您通常将其作为一个有趣的非零偏移量传递。很多时候,第二个参数是您要寻求的绝对偏移量,这就是fseek的意思。为了方便起见,您还可以设置一个位置,即在当前位置上加上或减去当前位置(SEEK_SET用于该位置),或者在文件的结尾处加上或减去当前位置,即SEEK_CUR是。

SEEK_ENDwhence且偏移量 0的情况下,这意味着您尝试将文件指针设置为文件的开头,也许也应该是一个方便的捷径。但是快捷方式并没有称为SEEK_SET,它是一个完全不同的库函数:SEEK_BEG,它实际上是rewind(fp)的快捷方式。