Получаю номер файлового дескриптора с помощью ф-ци _fileno из msvcrt.dll, чтобы в дальнейшем использовать его.
На тестах в IDE ZeroBrane Studio _fileno работает верно, возвращает число в пределах от 3 до 255. а в FAR Manager нет. возвращает 0, большие или отрицательные числа. Подскажите что я делаю не так или как в FAR Manager получить номер файлового дескриптора.
Пример тестового кода ниже.
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
Пример, запущенный через luajit, печатает 3,4 (стабильно)
Пример, запущенный через lfjit, печатает два больших непоследовательных числа, разными от запуска к запуску.
Пример, запущенный через lfjit, печатает два больших непоследовательных числа, разными от запуска к запуску.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
Нигде в документации не сказано, что io.open возвращает FILE*. Там сказано "It returns a new file handle", а это не одно и то же. Поэтому, даже если при каких-то обстоятельствах этот код у вас работает, нет гарантии, что при очередном обновлении LuaJIT, например, он не поломается.
Если уж пользуетесь FFI - вызывайте fopen, fclose и т.д., а не io.open.
Если уж пользуетесь FFI - вызывайте fopen, fclose и т.д., а не io.open.
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
И всё таки, если io.open - "It returns a new file handle". То вопрос можно задать по другому, как из "file handle" получить FILE* или номер файлового дескриптора, ведь внутри реализации LuaJIT где то LUA должен хранить какой то "file handle" операционной системы.
Может где в исходниках LuaJIT посмотреть или подскажите какой форум разработчиков LuaJIT.
Может где в исходниках LuaJIT посмотреть или подскажите какой форум разработчиков LuaJIT.
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
из каких исходиков собирается LuaJIT для Far Manager? т.е. где можно посмотреть на исходики LuaJIT для Far Manager.
- John Doe
- Бюрократ
- Posts: 13851
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
Программы и скрипты не должны полагаться на ВНУТРЕННЮЮ реализацию используемых библиотек. Ваш нерабочий пример это хорошо иллюстрирует.
Библиотека
io
, предоставляемая LuaJIT, не используется, она переопределена в LuaFAR. Смотрите исходники LuaFAR в репозитории Far Manager.
LuaJIT используется стандартный, без изменений, версия 2.1-beta3. Можно скачать с сайта LuaJIT.
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
kasru, сейчас добавил метод
Пример использования:
rawhandle
, возвращающий FILE*
. Будет в следующей ночной сборке.Пример использования:
local fd1 = lib._fileno(file1:rawhandle())
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
Спасибо, а возможно сделать сразу конвертацию в FILE*, без метода rawhandle ?
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
[LUA][FFI][msvcrt.dll][_fileno] FAR Manager возвращает неверное значение
Думаю, что возможно, но я этим заниматься не буду.