gpt4 book ai didi

python - 是否可以可移植确定 Python 中 off_t 的适当映射以用于 ctypes?

转载 作者:行者123 更新时间:2023-12-03 17:16:41 32 4
gpt4 key购买 nike

背景:POSIX-defined off_t数据类型是 variable-size depending on the environment 的有符号整数.对于 64 位构建环境,它似乎始终是 64 位 off_t。对于 32 位系统,off_t 的大小取决于环境(通常由 _FILE_OFFSET_BITS 和相关控制)。

我正在使用 Python 的 ctypes访问使用 off_t 的函数的一些库调用数据类型。 ctypes 没有 off_t 的类型所以通过 Structure 映射这样的 API否则需要选择一些由 定义的其他类型ctypes ,即 c_int 之一, c_int32 , c_int64 , c_longc_longlong .

在四处寻找其他人的解决方案时,我看到了各种各样的解决方案,其中大多数是猜测并仅限于其中一种环境,其中一些完全错误(使用无符号类型),而且没有一个是可移植的。

是否有一种健壮、便携的方法来确定 off_t 的大小?用于构建给定的 Python 解释器?

谢谢!

最佳答案

标准中不支持这一点,正如您自己指出的那样,它会根据用于编译库的标志(而不是 Python)在 32 位机器上有所不同。 (也就是说,您需要知道您使用的库例程是否使用 -D_FILE_OFFSET_BITS=64 编译...)

GCC 似乎定义了 off_tlong int相当一致。所以这可能是“最安全”的选择。或者你可以默认使用 64 位。在任何一种情况下,覆盖行为并指定位数的选项可能很有值(value)。

是否有一个函数可以调用,它会返回 off_t ?也许你可以用 0xFF 填充缓冲区,然后 seek(0)ftell()看看有多少个零被写入?

关于python - 是否可以可移植确定 Python 中 off_t 的适当映射以用于 ctypes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43671524/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com