Я изучаю, как обернуть функции c, используя Python ctypes' and am able to wrap and call a function, but I can't figure out how to get the
errno` после ошибки.Для этого примера я обертываю inotify_add_watch .Это не полный код, просто пример чего-то, что вызовет ошибку:
import ctypes
c_lib = ctypes.cdll.LoadLibrary('libc.so.6')
inotify_add = c_lib.inotify_add_watch
inotify_add.argtypes = (ctypes.c_int, ctypes.c_char_p, ctypes.c_uint32)
inotify_add.restype = ctypes.c_int
# This will cause an EBADF error
inotify_add(32, b'/tmp', 1) # returns -1
И в документации, которую я привел, сказано, что это вернет -1
, что он делает, но он также установитerrno
соответственно.Я не могу понять, как получить доступ к errno
сейчас.Если я попытаюсь ctypes.get_errno()
, это просто вернет 0
.Если я пытаюсь вызвать c_lib.errno()
, это вызывает segmentation error
, так что это тоже не работает.Есть ли способ, которым я могу получить errno
?