背景: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_int
、c_int32
、c_int64
、c_long
和c_longlong
。你知道吗
在搜索其他人的解决方案时,我看到了各种各样的解决方案,其中大多数都是猜测,并且仅限于其中一种环境,有些完全错误(使用无符号类型),而且没有一种是可移植的。你知道吗
对于给定Python解释器的构建,是否有一种健壮的、可移植的方法来确定off_t
的大小?
谢谢!你知道吗
标准中不支持这一点,正如您自己所指出的,在32位机器上,它将根据编译库时使用的标志而有所不同,而不是Python。(也就是说,您需要知道您正在使用的库例程是否是用-D\u FILE\u OFFSET\u BITS=64编译的…)
GCC似乎非常一致地将
off_t
定义为long int
。所以这可能是“最安全”的选择。或者你可以默认使用64位。在任何一种情况下,重写行为并指定位数的选项都可能是有价值的。你知道吗您是否可以调用一个返回
off_t
的函数?也许您可以用0xFF填充缓冲区,然后seek(0)
和ftell()
来查看写入了多少个零?你知道吗相关问题 更多 >
编程相关推荐