考虑以下代码:
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
后给我一个“段错误”。我做错了什么?
最佳答案
默认情况下,所有像这样包装的ctypes
函数都有restype == c_int
。所以你需要在调用它之前正确设置它。 argtypes
也是如此。
关于python - 如何在 ctypes 中取消引用 void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854815/