对于
whence
(或 POSIX 中的 fseek
)的 lseek
参数,一些调用 C lib 的语言假定 SEEK_SET、SEEK_CUR SEEK_END 分别为 0、1、2,例如 gfortran、Nim [^ py].
[^py]:虽然Python的seek专门集中了
SEEK_*
的值,但CPython确实将0,1,2映射到C lib的内部值。
我查过 C 和 POSIX 专业化,两者都没有专注于
SEEK_*
的值。
在代码中,我想知道在哪个操作系统和C编译器中,以下代码的输出不是
012
:
#include <stdio.h>
int main(){
printf("%d%d%d\n", SEEK_SET, SEEK_CUR, SEEK_END);
}
我在一些操作系统和 C 编译器上进行了测试,输出只是
012
:
如果没有,那么使用固定值为现有实现添加修复就没有意义了。
SEEK_SET SEEK_CUR SEEK_END 在任何 C 库上都不是 0,1,2 吗?
也许吧。 但如果不是今天,也许明天。
如果您必须在调用
fseek()
时使用0、1、2,请使用该数字作为数组索引。#include <stdio.h>
const int whence [] = { SEEK_SET, SEEK_CUR, SEEK_END };
int result = fseek(stream, 0, whence[2]); // Go to the end