在ctypes中使用Python的off\t的适当映射的可移植的确定是可能的吗?

2024-04-24 06:57:07 发布

您现在位置:Python中文网/ 问答频道 /正文

背景:POSIX-definedoff_t数据类型是variable-size depending on the environment的有符号整数。对于64位构建环境,它似乎始终是一个64位的off\t。对于32位系统,off\t的大小取决于环境(通常由文件偏移位和相关位控制)。你知道吗

我使用Python的ctypes访问一些使用off_t数据类型的函数的库调用。ctypes没有off_t的类型,因此通过Structure或其他方式映射这样的API需要选择一些由ctypes定义的其他类型,即c_intc_int32c_int64c_longc_longlong。你知道吗

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

对于给定Python解释器的构建,是否有一种健壮的、可移植的方法来确定off_t的大小?

谢谢!你知道吗


Tags: the类型size环境on符号解决方案ctypes
1条回答
网友
1楼 · 发布于 2024-04-24 06:57:07

标准中不支持这一点,正如您自己所指出的,在32位机器上,它将根据编译库时使用的标志而有所不同,而不是Python。(也就是说,您需要知道您正在使用的库例程是否是用-D\u FILE\u OFFSET\u BITS=64编译的…)

GCC似乎非常一致地将off_t定义为long int。所以这可能是“最安全”的选择。或者你可以默认使用64位。在任何一种情况下,重写行为并指定位数的选项都可能是有价值的。你知道吗

您是否可以调用一个返回off_t的函数?也许您可以用0xFF填充缓冲区,然后seek(0)ftell()来查看写入了多少个零?你知道吗

相关问题 更多 >