posix_memalign в питоне - PullRequest
       21

posix_memalign в питоне

0 голосов
/ 25 января 2010

Я не могу понять, почему следующее не работает

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) Я пытался привести пользовательский указатель к c_void_p но все равно ничего.

1 Ответ

1 голос
/ 25 января 2010

У вас есть две проблемы в вашем коде: вы делаете userpointer ctypes.c_void_p типом , а не его экземпляром, и вы передаете void *, который является userpointer, напрямую в posix_memalign, вместо void **, что требуется для posix_memalign. Следующее будет делать то, что вы хотите:

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')
...