如何在ctypes中取消引用void *?

时间:2015-09-29 22:28:59

标签: python linux ctypes

请考虑以下代码:

import ctypes

IPC_PRIVATE, MAP_SIZE, IPC_CREAT, IPC_EXCL = 0, 65536, 512, 1024

shmget = ctypes.cdll.LoadLibrary("libc.so.6").shmget
shmat = ctypes.cdll.LoadLibrary("libc.so.6").shmat

shm_id = shmget(IPC_PRIVATE, MAP_SIZE, IPC_CREAT | IPC_EXCL | 0600)
trace_bits = shmat(shm_id, 0, 0)
s = ctypes.string_at(ctypes.c_void_p(trace_bits), 1)
print(s[0])

当我尝试运行它时,它会给我一个"分段错误"成功运行shmat之后。我做错了什么?

1 个答案:

答案 0 :(得分:2)

默认情况下,所有ctypes函数都包含restype == c_int。所以你需要在调用它之前正确设置它。同样适用于argtypes