您的位置:首页 > 编程语言 > Python开发

项目记录 -- python调用回调函数

2014-07-07 18:27 204 查看
C源文件:

static int
get_callback(zpool_handle_t *zhp, void *data)
{
zprop_get_cbdata_t *cbp = (zprop_get_cbdata_t *)data;
char value[MAXNAMELEN];
zprop_source_t srctype;
zprop_list_t *pl;

for (pl = cbp->cb_proplist; pl != NULL; pl = pl->pl_next) {

/*
* Skip the special fake placeholder. This will also skip
* over the name property when 'all' is specified.
*/
if (pl->pl_prop == ZPOOL_PROP_NAME &&
pl == cbp->cb_proplist)
continue;

if (pl->pl_prop == ZPROP_INVAL &&
(zpool_prop_feature(pl->pl_user_prop) ||
zpool_prop_unsupported(pl->pl_user_prop))) {
srctype = ZPROP_SRC_LOCAL;

if (zpool_prop_get_feature(zhp, pl->pl_user_prop,
value, sizeof (value)) == 0) {
zprop_print_one_property(zpool_get_name(zhp),
cbp, pl->pl_user_prop, value, srctype,
NULL, NULL);
}
} else {
if (zpool_get_prop(zhp, pl->pl_prop, value,
sizeof (value), &srctype) != 0)
continue;

zprop_print_one_property(zpool_get_name(zhp), cbp,
zpool_prop_to_name(pl->pl_prop), value, srctype,
NULL, NULL);
}
}
return (0);
}
来源 -- illumos/usr/src/cmd/zpool/zpool_main.c


上面代码中:value定义的是数组char value[MAXNAMELEN];,我采用的方法如下:

value = c_char * 256

libzfs.zpool_get_prop(zhp, prop, value, 256, byref(srctype))


采用上述方法时,当运行到libzfs.zpool_get_prop时,直接显示为None

正确的方法为:

value = create_string_buffer(256)

ret = libzfs.zpool_get_prop(zhp, prop, value, 256, byref(srctype))


采用create_string_buffer才能正确显示

执行命令:print(type(value))
print(dir(value))

显示如下:

<class 'ctypes.c_char_Array_256'>
['__class__', '__ctypes_from_outparam__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_b_base_', '_b_needsfree_', '_length_', '_objects', '_type_', 'raw', 'value']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: