python中的posix_memalign

时间:2010-01-25 11:40:32

标签: python ctypes

我似乎无法弄清楚为什么以下不起作用

import ctypes
from ctypes.util import find_library
libc = ctypes.CDLL(find_library('c'))

userpointer = ctypes.c_void_p
sizeimage = 320*240*2

if libc.posix_memalign(userpointer, libc.getpagesize(), sizeimage) != 0:
    raise Exception('ENOMEM')

我正在尝试使用v4l2捕获。我不能分配内存。 我试过传递ctypes.addressof(userpointer) 我试图将userpointer转换为c_void_p 但仍然没有。

1 个答案:

答案 0 :(得分:1)

你的代码中有两个问题:你使用cpopes.c_void_p 类型的而不是它的实例,并且你将用户指针的void *直接传递给posix_memalign,而不是posix_memalign要求的void **。以下将做你想要的:

import ctypes
from ctypes.util import find_library
libc = ctypes.CDLL(find_library('c'))

userpointer = ctypes.c_void_p()
sizeimage = 320*240*2

if libc.posix_memalign(ctypes.byref(userpointer), libc.getpagesize(),
                       sizeimage) != 0:
    raise Exception('ENOMEM')