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

问题描述 投票:0回答:2
有三个常数,您可以在诸如

origin

之类的函数中使用以确定从您的位置计数的位置:
fseek
offset
SEEK_SET
SEEK_CUR
SEEK_END
似乎是自称是指文件流的当前位置和结尾,但是为什么
SEEK_CUR
曾经用来意思是开始呢?为什么不类似
SEEK_END
由于您可以添加一个偏移。通过使用
SEEK_SET
,您可以明确设置偏移量。 (通过将其添加到开始)

c file io
2个回答
12
投票

SEEK_BEG

从lseek的Manpage:

SEEK_SET


其他问题的答案是“因为

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.
有第二个论点并不总是为零”。

1
投票
如果您始终将第二个参数作为零传递,然后将文件指针设置为当前位置(这几乎是无用的no-op),并且将文件指针设置为文件的末尾,

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.

会将其设置为文件的开头,这可能会让您想知道为什么没有称其为
fseek

但是,当然有第二个论点,通常您将其作为有趣的,非零的偏移。 在大部分时间里,第二个论点是您想要寻求的绝对偏移,这就是SEEK_CUR的意思。 为了方便起见,您还可以设置一个位置加上当前位置的位置,这是SEEK_END的目的,或者是文件的末尾,这就是

SEEK_SET
SEEK_BEG
的目的。
fseek
SEEK_SET

和偏移

IS

0的情况下,这意味着您正在尝试将文件指针设置为文件的开始,也许应该有方便的快捷方式。  但是捷径未称为
SEEK_CUR
,这是一个完全不同的库函数:
SEEK_END
,这确实是
whence
.
的快捷方式。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.