- 主题:怎么样确定使用 lseek64 还是 lseek
bsd 社区的 lseek() 即使在 32 位系统,它的 offset 参数也是 64 位长度的。所以 bsd 不存在 lseek64() 函数。要怎么处理这个差异呢?
#if _FILE_OFFSET_BITS == 32
return ::lseek64(fd, pos, SEEK_SET) >= 0;
#else
return ::lseek(fd, pos, SEEK_SET) >= 0;
#endif
这个写法好像不对。
--
FROM 125.78.66.*
比较喜欢用 c 语言直接做。求助于外部的 configure 工具的话,cmake, automake, meson 有很多 make 工具,不好适配。
【 在 ankyhe 的大作中提到: 】
: 这些可以通过configure来做。譬如你准备一个简单的example.c来判断传入lseek第三个参数是一个64位数,会不会正确。然后configure编译这个example.c并且运行来判断。
: 发自「今日水木 on iPhone 12」
--
FROM 112.47.122.*
有道理。。这种做法在远古的系统里面不存在 lseek64() 的时候也能编译通过。
奇怪 bsd 系直接复用 lseek() 来支持 LARGE FILE 不会出问题么。
【 在 gameplayer 的大作中提到: 】
: 文件头自己定义 _FILE_OFFSET_BITS = 64 就可以了
: 在32位系统上 lseek 会自动变为 lseek64 (manual):
: on a 32-bit system, the symbol lseek is aliased to lseek64 if the macro _FI
: ...................
--
FROM 112.47.122.*
也有道理啊。。那有什么好的办法吗?
【 在 laputa2013 的大作中提到: 】
: 这也容易出事,比如第三方库的头文件里用了off_t作为参数类型。
--
FROM 112.47.122.*