Python与C参数交互(结构指针).

来源:互联网 发布:狗爹域名注册 编辑:程序博客网 时间:2024/05/20 13:39

在Python中某些时候需要C做效率上的补充. 在实际应用中,需要做部分数据的交互. Python 可以通用 ctypes 模块很好地调用C.  下面演示了 Python 中调用C一个标准函数. 传递一个结构指针入. 得到C中分配内存数据 传递出. 希望对你的Python 学习有所帮助.

 

1 test.c

 

#include <stdio.h>
#include 
<stdlib.h>

typedef 
struct {
        unsigned 
char words[10];
}
 keywords;

typedef 
struct {
        keywords 
*kws;
        unsigned 
int len;
}
 outStruct;

int test(outStruct *o){
        unsigned 
int i=4;
        o
->kws = (keywords *)malloc(sizeof(unsigned char)*10*i);
        strcpy(o
->kws[0].words,"test 1");
        strcpy(o
->kws[1].words,"test 2");

        o
->len = i;
        
return 1;
}

 

2 编译

 

gcc --fPIC -o test.o test.c
gcc 
-shared test.-o test.so

 

3  test.py

 

from ctypes import *

class keywords(Structure):
        _fields_ 
= [
                        (
'words', c_char *10),]

class outStruct(Structure):
        _fields_ 
= [
                        (
'kws', POINTER(keywords)),
                        (
'len', c_int),]

libc
=CDLL("./test.so")
libc.test.argtypes 
= [POINTER(outStruct)]

= outStruct()

ret 
= libc.test(byref(o))

print o.kws[0].words;
print o.kws[1].words;
print o.len

 

4 测试结果

 

$ python test.py
test 
1
test 
2
4