Получить Lua Stdout из C API - PullRequest
       4

Получить Lua Stdout из C API

0 голосов
/ 11 декабря 2018

Я изо всех сил пытаюсь получить стандартный вывод из интерфейса Lua Script в банке C:

тип (_ENV.io.stdout) userdata

из C,Я делаю:

lua_getglobal(L,"_G");
lua_pushstring( L, "io" );
lua_gettable( L, -2 );
lua_pushstring( L, "stdout" );
lua_gettable( L, -2 );
stackTrace( L );

Итак, на этом этапе я получаю:

---- Begin Stack ----
Stack size: 3

3 -- (-1) ---- userdata
2 -- (-2) ---- table
1 -- (-3) ---- table
---- End S tack ----

Кто-нибудь знает, как получить stdout, stderr, чтобы я мог printf () для него,из Lua C API?

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете получить основной дескриптор файла, используя Lua API, но это определенно не очень хорошая идея, потому что это деталь реализации.Как вы можете видеть, он изменился между Lua 5.2 и 5.1.

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

int main() {
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);

    lua_getglobal(L, "io");
    lua_pushstring(L, "stdout");
    lua_gettable(L, -2);
    FILE *lstdout =
#if LUA_VERSION_NUM > 501
        ((luaL_Stream *)lua_touserdata(L, -1))->f;
#else
        *(FILE **)lua_touserdata(L, -1);
#endif
    lua_pop(L, 2);

    fprintf(lstdout, "Hello World!\n");

    lua_close(L);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...