Lua os.exit()

前言#

今天来看一个退出函数,说起退出函数估计大家都会想起c语言中的exit(),今天要说的就是exit()函数,只不过不是C语言的函数,而是lua中的os.exit()函数,但让他们的作用都是一样的,就是退出程序。

内容#


os.exit()##

  • 原型:os.exit(code)
  • 解释:相当于C的exit函数,终止主程序,code为返回值。

Usage##

  • 首先我们来新建一个文件命名为exittest.lua的文件然后编写如下代码:
function func_testexit()
    print("lua --> func_testexit start");

    io.read();

    os.exit(0);     --==>os.exit() 用法

    print("lua --> func_testexit end");

    io.read();
end
  • 然后来编写c++调用函数
    lua_State *L = lua_open();
    luaL_openlibs(L);

    printf("c++ --> before call func_testexit\n");

    luaL_dofile(L,"exittest.lua");              // 加载执行lua文件

    lua_getglobal(L, "func_testexit");          // 函数入栈
    lua_pcall(L, 0, 0, 0);                      // 打印信息

    printf("c++ --> after call func_testexit\n");

    lua_close(L);                               // 关闭lua环境  
  • 运行结果:
exit.png

总结#

  • 需要注意的是,os.exit()不仅仅会退出lua运行环境,连宿主程序也会退出,代码中的io.read();仅仅为了可以看到打印信息,否则宿主程序直接退出就什么也看不到了。
  • 我们可以发现代码print("lua --> func_testexit end");printf("c++ --> after call func_testexit\n");是无论如何也执行不到的。
  • 利用os.exit()可以退出宿主程序,我们可以在lua解释器中使用这个函数已退出解释器,使用方法如下:
Lua os.exit()_第1张图片
exit2.png
  • 我们也可以来看一下这个函数的实现源码,其实就是调用了c语言的exit():
static int os_exit (lua_State *L) {
  exit(luaL_optint(L, 1, EXIT_SUCCESS));
}

//其中c语言中有如下定义:
/* Definition of the argument values for the exit() function */
#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1

你可能感兴趣的:(Lua os.exit())