获取Structure'字段的pointer()对象(或地址)

时间:2014-07-10 22:45:36

标签: python c pointers ctypes ioctl

我正在尝试使用ctypes在Python中构建绑定。

我想从我的Python项目中调用ioctl。

首先,这是与我使用的结构类似的结构。

class struct_some_struct(Structure):
    _fields_ = [("field1",  c_uint32),
                ("field2",  POINTER(c_uint8)]

假设我们声明了类似的内容:

mystruct = struct_some_struct()

这是合约。 我目前正在使用addressof()。它在大多数情况下都会成功,但是当地址大于INT_MAX时(经常在64位机器上发生),我遇到了问题,得到OverFlowErrors,e.t.c。所以我在考虑使用pointer()而不是addressof()来重写它。

我需要获取field1的地址,因为ioctl需要一个指向这个特定字段的指针。 该字段由先前的ioctl调用填充,该调用将指针传递给mystruct(该ioctl没有问题)。

使用addressof(),解决方案可能是:

addressof(mystruct) + struct_some_struct.field1.offset

这将是field1的地址。

但正如我所提到的,我不想使用addressof()。

如何将指针()(指向field1的指针)对象传递给ioctl()?

打字:

pointer(mystruct.field1) 

不会工作,因为type(mystruct.field1)不是c_uint32,而是根据Python的int。

也做类似的事情:

pointer(c_uint32(mystruct.field1))

也不好,因为ioctl可能会改变field1,而这样做的改变不会影响mystrcuct.field1值。

我可以使用byref(mystruct,struct_some_struct.field1.offset),但fcntl.ioctl不接受它(libc' s ioctl接受它)

提前致谢。

0 个答案:

没有答案