首页 > 代码库 > Lua1.0 代码分析 inout.c
Lua1.0 代码分析 inout.c
inout.c 代码分析
主要看下对于文件的处理
/* ** Function to open a file to be input unit. ** Return 0 on success or 1 on error. */ int lua_openfile (char *fn) { lua_linenumber = 1; lua_setinput (fileinput); lua_setunput (fileunput); fp = fopen (fn, "r"); if (fp == NULL) return 1; if (lua_addfile (fn)) return 1; return 0; }
传入脚本文件名,设置当前的输入行为1
设置文件读取和放回。
打开文件,设置文件句柄。
把文件加到文件列表里。lua_addfile 在 table.c 中定义,等到 table.c 中再做分析。
/* ** Function to get the next character from the input file */ static int fileinput (void) { int c = fgetc (fp); return (c == EOF ? 0 : c); }
从文件句柄里读取一个字符
/* ** Function to unget the next character from to input file */ static void fileunput (int c) { ungetc (c, fp); }
把一个字符放回文件句柄
int lua_openstring (char *s) 和 lua_openfile 差不多,只不过文件名用的是一个 “String" 开头的字符串表示。
/* ** Called to execute SETFUNCTION opcode, this function pushs a function into ** function stack. Return 0 on success or 1 on error. */ int lua_pushfunction (int file, int function) { if (nfuncstack >= MAXFUNCSTACK-1) { lua_error ("function stack overflow"); return 1; } funcstack[nfuncstack].file = file; funcstack[nfuncstack].function = function; nfuncstack++; return 0; }
设置脚本中的函数到函数这个函数栈中。记录其文件名和函数地址。
Lua1.0 代码分析 inout.c
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。