水木社区手机版
首页
|版面-Linux开发与高级讨论(LinuxDev)|
新版wap站已上线
返回
首页
|
上页
|
2/2
|
转到
主题:怎么样确定使用 lseek64 还是 lseek
10楼
|
cavendish
|
2022-05-31 21:40:50
|
只看此ID
https://github.com/qt/qtbase/blob/dev/mkspecs/common/posix/qplatformdefs.h
【 在 hgoldfish 的大作中提到: 】
: bsd 社区的 lseek() 即使在 32 位系统,它的 offset 参数也是 64 位长度的。所以 bsd 不存在 lseek64() 函数。要怎么处理这个差异呢?
: #if _FILE_OFFSET_BITS == 32
: return ::lseek64(fd, pos, SEEK_SET) >= 0;
: ...................
--
FROM 85.166.63.*
11楼
|
javaboy
|
2022-06-01 00:36:17
|
只看此ID
static_assert(...)
【 在 laputa2013 的大作中提到: 】
: 这也容易出事,比如第三方库的头文件里用了off_t作为参数类型。
--
FROM 101.84.60.*
12楼
|
gameplayer
|
2022-06-01 11:14:38
|
只看此ID
确实是问题,查了下,AC从20年前就做了个网站说largefile的问题
http://ac-archive.sourceforge.net/largefile/index.html
现在感觉linux/solaris这么做还不如像bsd那样直接不兼容改成64位的呢..
另外,第三方库如果头文件用了off_t还是32位的也有潜在的溢出问题吧?
就这个问题本身来说,或许可以全部使用off64_t以及lseek64,使用编译脚本辅助根
据编译环境自定义适当的off64_t和lseek64,这样可以明确告知使用者当前用的是64位
的offset,同时不会影响第三方库
比如用cmake的话可以通过CheckTypeSize和check_symbol_exists判断lseek是否存在以
及是否是64位off_t,然后define适当的off64_t和lseek64
【 在 laputa2013 的大作中提到: 】
: 这也容易出事,比如第三方库的头文件里用了off_t作为参数类型。
--
FROM 111.199.187.*
首页
|
上页
|
2/2
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版