如何为定义的结构创建指针?

时间:2011-03-12 09:05:59

标签: python pointers linked-list structure ctypes

我正在围绕getifaddrs()编写一个Python包装器。该接口使用struct ifaddrs类型,其第一个字段是指向另一个struct ifaddrs的指针。

struct ifaddrs {
    struct ifaddrs *ifa_next;   /* Pointer to the next structure.  */
    ... /* SNIP!!11 */
};

但是,用Python表示:

class struct_ifaddrs(Structure):

    _fields_ = [
        ('ifa_next', POINTER(struct_ifaddrs)),]

给出了这个错误:

matt@stanley:~/src/pydlnadms$ ./getifaddrs.py 
Traceback (most recent call last):
  File "./getifaddrs.py", line 58, in <module>
    class struct_ifaddrs(Structure):
  File "./getifaddrs.py", line 61, in struct_ifaddrs
    ('ifa_next', POINTER(struct_ifaddrs)),
NameError: name 'struct_ifaddrs' is not defined
在完成类定义之前,

struct_ifaddrs不会绑定到当前作用域。当然,作为一种指针类型,显然在声明过程中不需要struct_ifaddrs的定义,就像在C中一样,但是在以后的使用过程中需要解析类型。我该怎么办?

1 个答案:

答案 0 :(得分:5)

这个怎么样?

class struct_ifaddrs(Structure):
    pass
struct_ifaddrs._fields_ = [
    ('ifa_next', POINTER(struct_ifaddrs)),]

正如Paul McGuire在评论中指出的那样,这被记录为the ctypes documentationyet another time in the same docs中针对此问题的标准解决方案。