Я пытаюсь передать дескриптор файла через ctypes, функции C, где записи выполняются на fd.На Linux это работает.На Windows это не так, и я не понимаю, почему (у меня нет опыта в качестве разработчика для Windows)
//C func signature:
void fun(struct bah *opaque, int fd)
из Python (детали опущены):
mylib.fun.argtypes = [POINTER(bah), c_int]
fh = open(filename,'wb')
#doesn't work on windows, works on linux/unix
mylib.fun(some_ctypes_struct, fh.fileno())
#doesn't work on windows
mylib.fun(bah_struct, ctypes.cdll.msvcrt._open(filename,_O_FLAGS_MASK, ACCMASK)
#doesn't work
mylib.fun(bah_struct, os.open(...))
программаумирает при write () с ошибочным утверждением _osfile (fh) & FOPEN
cl.exe: 16.00.40219.01 для x86 python 2.7.2 msc v.1500 32bit
как мне полагатьсделать это?нет, я не хочу разгрузить open () в lib.Я хочу передать уже открытый дескриптор файла безопасным способом, независимым от платформы.
дополнительная информация, на всякий случай: библиотека tinycdb, я быстро перенес ее в окна с короткой спецификацией cmake инесколько грязных патчей для работы экспорта getopt и dll.библиотека и инструмент exe работают как положено (проверено).оболочки Python ctypes для tinycdb работают на Linux, как и ожидалось.окна дают мне глазные яблоки.он не примет, что fd является допустимым дескриптором, даже если я передаю его после открытия его собственным (msvcrt) _open libcall.
конечно, все работает, если я открыт () ing /закрыть () файл в библиотеке, но я не могу позволить изменить API.