Lua标准库阅读总结(官方文档)

13k 词
Contents
	</div>
	
	<p>Lua的标准库直接通过C语言的API进行实现的。有一些函数对于这个语言提供的功能是必不可少的(例如getmetatable和type又元表是lua的一个重要语言特性,还会总结哒)其他的提供了一些输出到外部的功能(例如IO)还有一些很有用的但是用lua自身进行实现的一些函数(例如table.sort)</p>

库的大纲

所有的库都是通过官方的C语言的API就像C的API的一样的进行分离。

1.basic library 
2.coroutine library 
3.package library 
4.string manipulation 
5.basic UTF-8 support 
6.table manipulation 
7.mathematical functions 
8.input and output 
9.operating system facilities 
10.debug facilities 

还有一堆废话告诉你这些库使用什么调用的。

1.Basic Functions

basic library是lua的核心,如果你并没有使用他们的话,你得自己去实现这些功能才可以

1.1 assert (v [, message])

功能:相当于C的断言,
参数:
v:当表达式v为nil或false将触发错误,
message:发生错误时返回的信息,默认为”assertion failed!”

1.2 collectgarbage (opt [, arg])

功能:是垃圾收集器的通用接口,用于操作垃圾收集器
参数:

1.opt:操作方法标志

2.”Stop”: 停止垃圾收集器

3.”Restart”: 重启垃圾收集器

4.”Collect”: 执行一次全垃圾收集循环

5.”Count”: 返回当前Lua中使用的内存量(以KB为单位)

6.”Step”: 单步执行一个垃圾收集. 步长 “Size” 由参数arg指定 (大型的值需要多步才能完成),如果要准确指定步长,需要多次实验以达最优效果。如果步长完成一次收集循环,将返回True

7.”Setpause”: 设置 arg/100 的值作为暂定收集的时长

8.”Setstepmul”: 设置 arg/100 的值,作为步长的增幅(即新步长=旧步长*arg/100)
“isrunning”: 返回一个bool值告诉你,垃圾回收器是否正在运行

1.3 dofile (filename)

功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。返回所有块的返回值。当发生错误时,dofile将错误反射给调用者
注:dofile不能在保护模式下运行

1.4 error (message [, level])

功能:终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)
通常情况下,error会附加一些错误位置的信息到message头部.

Level参数指示获得错误的位置,
Level=1[默认]:为调用error位置(文件+行号)
Level=2:指出哪个调用error的函数的函数
Level=0:不添加错误位置信息

1.5 _G全局环境表(全局变量)

功能:记录全局环境的变量值的表 _G._G = _G

1.6 getmetatable(object)

功能:返回指定对象的元表(若object的元表有metatable这个字段,则返回object的元表.metatable的值),当object没有元表时将返回nil
若指定对象有元表,但是没有__metatable这个字段,则返回给定的对象的元表

1.7 ipairs (t)

功能:返回三个值 迭代函数、表、0
多用于穷举表的键名和键值对
如:for i,v in ipairs(t) do
[body]
end
每次循环将索引赋级i,键值赋给v
就是得到(1,t[1]), (2,t[2]),一直到出现了第一个为nil的值

1.7 load (chunk [, chunkname [, mode [, env]]])

功能:如果chunk是字符串则就是字符串,如果是函数则装载一个块中的函数,每次调用func将返回一个连接前一结的字串,在块结尾处将返回nil
当没有发生错误时,将返回一个编译完成的块作为函数,否则返回nil加上错误信息,此函数的环境为全局环境
chunkname用于错误和调试信息

1.8 loadfile ([filename [, mode [, env]]])

跟load类似,但装载的是文件或当没有指定filename时装载标准输入(stdin)的内容

1.9 next (table [, index])

功能:允许程序遍历表中的每一个字段,返回下一索引和该索引的值。
参数:table:要遍历的表
   index:要返回的索引的前一索中的号,当index为nil[]时,将返回第一个索引的值,当索引号为最后一个索引或表为空时将返回nil
注:可以用next(t)来检测表是否为空(此函数只能用于以数字索引的表与ipairs相类似)

1.10 pairs (t)

如果t有元方法__pairs,把t当作变量调用它并且从这个调用中返回第一个有三个results
否则,返回三个值,next函数,表t,和空
for k,v in pairs(t) do body end
看见next,则要小心遍历中修改表的状况

1.11 pcall (f [, arg1, ···])

功能:在保护模式下调用函数(即发生的错误将不会反射给调用者)
当调用函数成功能返回true,失败时将返回false加错误信息

1.12 print (···)

功能:简单的以tostring方式格式化输出参数的内容

1.13 rawequal (v1, v2)

检查v1是否等于v2,并且不会调用__eq元表方法,返回一个bool值

1.14 rawget (table, index)

得到一个table[index]的真正的值,并且不会调用__index的元表方法,table必须是一个表,index可以是任何值

1.15 rawlen (v)

返回v的长度,v可以是一个表也可以是一个字符串也不会调用__len元表方法,返回一个整型

1.16 rawset (table, index, value)

把value给table[index],不会调用__newindex元表方法,table必须是一个表,index可以是不同于nil和NaN的任何值,value可以是任何lua的value。这个函数返回一个表

1.17 select (index, ···)

功能:当index为数字将返回所有index大于index的参数:如:select(2,”a”,”b”) 返回 “b”
当index为”#”,则返回参数的总个数(不包括index)

1.18 setmetatable (table, metatable)

功能:为指定的table设置元表metatable,如果metatable为nil则取消table的元表,当metatable有__metatable字段时,将触发错误
这个函数返回表
注:只能为LUA_TABLE 表类型指定元表

1.19 tonumber (e [, base])

功能:尝试将参数e转换为数字,当不能转换时返回nil
base(2~36)指出参数e当前使用的进制,默认为10进制,如tonumber(11,2)=3

1.20 tostring (v)

功能:将参数e转换为字符串,此函数将会触发元表的__tostring事件
type(v)
功能:返回参数的类型名(“nil”,”number”, “string”, “boolean”, “table”, “function”, “thread”, “userdata”)

1.21 _VERSION

功能:返回当前Lua的版本号”Lua 5.3”.
xpcall (f, err)
功能:与pcall类似,在保护模式下调用函数(即发生的错误将不会反射给调用者)
但可指定一个新的错误处理函数句柄
当调用函数成功能返回true,失败时将返回false加err返回的结果

2.Coroutine Manipulation

这个库函数包括了对于协同程序的操作,在表内进行协同
文档中包含对于协同 程序的描述,自行查找吧

2.1 coroutine.create (f)

创建一个包含f的新的协程,f必须是函数,返回一个新的协程,对象类型为thread

2.2 coroutine.isyieldable ()

如果正在运行的协程可以让出,则返回真。值得注意的是,只有主协程(线程)和C函数中是无法让出的。

2.3 coroutine.resume (co [, val1, ···])

这是一个非常重要的函数。用来启动或再次启动一个协程,使其由挂起状态变成运行状态。

  可以这么说,resume函数相当于在执行协程中的方法。参数Val1…是执行协程co时传递给协程的方法。

  首次执行协程co时,参数Val1…会传递给协程co的函数;

  再次执行协程co时,参数Val1…会作为给协程co中上一次yeild的返回值。

  不知道这句话大家理解了没,这是协程的核心。如果没理解也不用急,继续往下看,稍后我会详细解释。

  resume函数返回什么呢?有3种情况:

  1)、如果协程co的函数执行完毕,协程正常终止,resume 返回 true和函数的返回值。

  2)、如果协程co的函数执行过程中,协程让出了(调用了yeild()方法),那么resume返回true和协程中调用yeild传入的参数。

  3)、如果协程co的函数执行过程中发生错误,resume返回false与错误消息。

  可以看到resume无论如何都不会导致程序崩溃。它是在保护模式下执行的。

2.4 coroutine.running ()

用来判断当前执行的协程是不是主线程,如果是,返回运行的协程和true。

2.5 coroutine.status (co)

 返回一个字符串,表示协程的状态。有4种状态:

  1)、running。如果在协程的函数中调用status,传入协程自身的句柄,那么执行到这里的时候才会返回running状态。

  2)、suspended。如果协程还未结束,即自身调用了yeild或还没开始运行,那么就是suspended状态。

  3)、normal。如果协程Aresume协程B时,协程A处于的状态为normal。在协程B的执行过程中,协程A就一直处于normal状态。因为它这时候既不是挂起状态、也不是运行状态。

  4)、dead。如果一个协程发生错误结束,或正常终止。那么就处于dead状态。如果这时候对它调用resume,将返回false和错误消息。

2.6 coroutine.wrap (f)

wrap()也是用来创建协程的。只不过这个协程的句柄是隐藏的。跟create()的区别在于:

  1)、wrap()返回的是一个函数,每次调用这个函数相当于调用coroutine.resume()。

  2)、调用这个函数相当于在执行resume()函数。

  3)、调用这个函数时传入的参数,就相当于在调用resume时传入的除协程的句柄外的其他参数。

  4)、调用这个函数时,跟resume不同的是,它并不是在保护模式下执行的,若执行崩溃会直接向外抛出。

2.7 coroutine.yield (···)

  使正在执行的函数挂起。

  传递给yeild的参数会作为resume的额外返回值。

3. Modules

这个库提供一个了一些加载module的基本工具方法在lua中。由require、module方法及package表组成

3.1 require (modname)

功能:加载指定的模块。

  此函数先检测package.loaded表中是否存在modname,存在则直接返回当中的值,没有则通过定义的加载器加载modname。
   1) require机制相关的数据和函数
package.path:保存加载外部模块(lua中”模块”和”文件”这两个概念的分界比较含糊,因为这个值在不同的时刻会扮演不同的角色)的搜索 路径,这种路径是”模板式的路径”,它里面会包含可替代符号”?”,这个符号会被替换,然后lua查找这个文件是否存在,如果存在就会调用其中特定的接 口。典型的值为:
“./?.lua;./?.lc;/usr/local/?/init.lua”
如果lua代码中调用:require(“hello.world”)
那么lua会依次查找:
./hello/world.lua ==>这里”hello.world”变成了”hello/world”,并替换了模型”./?.lua”
./hello/world.lc
…..
(这种处理方式和python类似,只不过不需要init.py,也有调用python中的init.py)
package.path在虚拟机启动的时候设置,如果存在环境变量LUA_PATH,那么就用该环境变量作为
它的值,并把这个环境变量中的”;;”替换为luaconf.h中定义的默认值,如果不存在该变量就直接使用
luaconf.h定义的默认值

package.cpath:作用和packag.path一样,但它是用于加载第三方c库的。它的初始值可以通过环境变量
LUA_CPATH来设置
package.loadlib(libname, func):相当与手工打开c库libname, 并导出函数func返回,loadlib其实是ll_loadlib

  2) 查找加载器顺序:

   require(在lua中它是ll_require函数)的查找顺序如下:
a.首先在package.loaded查找modelname,如果该模块已经存在,就直接返回它的值
b.在package.preload查找modelname, 如果preload存在,那么就把它作为loader,调用loader(L)
c.根据package.path的模式查找lua库modelname,这个库是通过module函数定义的,对于顶层的lua库,文件名和库名是一 样的而且不需要调用显式地在lua文件中调用module函数(在ll_require函数中可以看到处理方式),也就是说lua会根据lua文件直接完 成一个loader的初始化过程。
d.根据package.cpath查找c库,这个库是符合lua的一些规范的(export具有一定特征的函数接口),lua先已动态的方式加载该c库,然后在库中查找并调用相应名字的接口,例如:luaopen_hello_world
e.已第一个”.”为分割,将模块名划分为:(main, sub)的形式,根据package.cpath查找main,如果存在,就加载该库并查询相应的接口:luaopen_main_sub,例如:先查找 hello库,并查询luaopen_hello_world接口
f.得到loder后,用modname作为唯一的参数调用该loader函数。当然参数是通过lua的栈传递的,所以loader的原型必须符合lua的规范:int LUA_FUNC(lua_State *L)

ll_require会将这个loader的返回值符给package.loaded[modelname],如果loader不返回值同时 package.loaded[modelname]不存在时, ll_require就会把package.loaded[modelname]设为true。最后ll_reuqire把package.loaded [modelname]返回给调用者。当加载失败时,require将触发错误

  3) require的另一个功能是避免重复加载同一个文件两次。Lua保留一张所有已经加载的文件的列表(使用table保存)。如果一个加载的文件在表中存在require简单的返回;表中保留加载的文件的虚名,而不是实文件名。所以如果你使用不同的虚文件名require同一个文件两次,将会加载两次该文件。比如require “foo”和require “foo.lua”,路径为”?;?.lua”将会加载foo.lua两次。我们也可以通过全局变量_LOADED访问文件名列表,这样我们就可以判断文件是否被加载过;同样我们也可以使用一点小技巧让require加载一个文件两次。比如,require “foo”之后_LOADED[“foo”]将不为nil,我们可以将其赋值为nil,require”foo.lua”将会再次加载该文件。   

3.2  package.cpath

  功能:用于require C loader的搜索路径

  可以通过修改LUA_CPATH变量(luaconf.h)修改此值   

3.3  package.loaded

  功能:一个用于让require知道哪些模块已加载的记录表,如果package.loaded已经有require要的值,则直接返回此值

3.4  package.loadlib (libname, funcname)

  功能:通过动态连接C函数库方式加载Lua扩展库

  libname为库文件名,funcname为入口函数(此函数必须为纯C接口函数 c++则需用 extern “C” {} 进行限制)

3.5  package.path

  功能:用于require Lua loader的搜索路径

  可以通过修改LUA_PATH变量(luaconf.h)修改此值

3.6 package.preload

  功能:一个用于保存特殊模块加载器的表   

3.7  package.seeall(module)

  功能:为module设置一个元表,此元表的__index字段的值为全局环境_G。所以module可以访问全局环境

  注:以此函数作为module()的一个选项(详细见module())   

3.8  package.searchers

  
  一个使用require去控制加载modules的表,这个表的每一个入欧都是searcher函数,当寻找一个module的时候,require使用升序排列调用每一个searchers根据module的name(参数必须失由require给的)作为他自己唯一的参数。这个函数可以返回另一个函数(loader的module)加上一个额外的值。经由那个loader传递的值,或者一个为什么没有找到那个module的解释的字符串(如果没有什么说的就输出nil)lua初始化一个表需要四个searcher的函数
  第一个searcher 就是loader这个package.preload 表
  第二个搜索器就是查找一个加载起作为lua的库,使用package.path.这个路径进行存储的,这个seach工作完成使用package.searchpath.进行描述
  第三个搜索器查找一个C的库的加载器,使用给定的变量的路径package.cpath. 进行加载。这个seach工作完成使用package.searchpath.进行描述
  。。。
  所有的搜索器除了第一个是返回一个preload作为一个额外的值当被找到的时候,其他的都返回package.searchpath和一个额外的值。第一个搜索器不返回任何额外的值

3.9  package.searchpath (name, path [, sep [, rep]])

根据给定的名字和路径进行查找   

4.String Manipulation

  1. string库中所有的字符索引从前往后是1,2,…;从后往前是-1,-2,…
  2. string库中所有的function都不会直接操作字符串,而是返回一个结果

4.1 string.byte(string [,pos])

返回第pos个字符的整数表示形式.如a为97.

4.2 string.char(i1,i2…)

i1,i2为整型,将i1,i2..等转化为对应的字符然后连接成字符串,并返回.如i1=97则返回a.

4.3 string.dump(functoin)

返回一个参数函数的2进制代码.(疑问)

4.4 string.find(s,pattern [,init [,plain]])

查找pattern在s中的位置,返回pattern在s中的开始位置和结束位置.init是开始查找的位置.plain未知.

4.5 string.format (formatstring, ···)

返回一个具有相应格式的字符串

4.6 string.gmatch (s, pattern)

这个函数基本就是用来配合for循环使用的,返回一个迭代器函数,每次调用这个迭代器函数都会返回一个匹配该字符串的值。

s = "hello world from Lua"
     for w in string.gmatch(s, "%a+") do
   print(w)
     end

string.gsub (s, pattern, repl [, n])

这个函数用来进行字符替换的。将每个匹配的字符串替换成指定的字符串repl。返回替换完毕的字符串和替换的次数。个人觉得这个函数非常有意思。

若repl为函数则会用匹配到的参数作为参数调用这个函数,若repl为table,则会用匹配到的参数作为键去查找这个表。

4.7 string.len(s):

返回字符串的长度.

4.8 string.lower(s):

变小写.

4.9 string.match (s, pattern [, init])

这个函数与find()函数类似,不同的是,find返回匹配的索引,这个函数返回第一个匹配的内容本身,

4.10 string.pack (fmt, v1, v2, ···)

返回一个fmt格式的二进制的包含v1和v2的字符串

4.11 string.packsize (fmt)

返回上面那个给定格式的size

4.12 string.upper(s):

变大写.

4.13 string.rep (s, n [, sep])

这个函数就是用来将某个字符串自我复制链接起来。

4.14 string.sub(s,i [,j])

取s中从i开始到j为止的自字符串.默认j为长度.-i表示倒数.

4.15 string.reverse (s)

反转字符串

4.16 string.sub (s, i [, j])

这个函数就是用来截取字符串。

4.17 string.unpack (fmt, s [, pos])

返回一个以fmt格式包装了的s。pos为可选参数,从s开始。读取值,也返回第一个没有从s读取的byte的功能

5. Table Manipulation

5.1 table.concat(table, sep, start, end)

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长.

sep, start, end这三个参数是顺序读入的, 所以虽然它们都不是必须参数, 但如果要指定靠后的参数, 必须同时指定前面的参数.
table.insert(table, pos, value)

5.2 table.insert()

函数在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

5.3 table.remove(table, pos)

table.remove()函数删除并返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起.
table.sort(table, comp)

5.4 table.sort()

函数对给定的table进行升序排序.

6. Math

  | 函数名    描述        | 示例    |  结果  |
   | --------                    | -----:     | :----:   |
   | pi        圆周率    | math.pi      |   3.1415926535898    |
|abs    取绝对值    | math.abs(-2012)|    2012|
|ceil    向上取整    | math.ceil(9.1)    |10|
|floor    向下取整    | math.floor(9.9)    |9|
|max    取参数最大值|     math.max(2,4,6,8)|8|
|min    取参数最小值    | math.min(2,4,6,8)    |2|
|pow    计算x的y次幂|     math.pow(2,16)    |65536|
|sqrt    开平方|     math.sqrt(65536)    |256|
|mod    取模|     math.mod(65535,2)    |1|
|modf    取整数和小数部分|     math.modf(20.12)    |20   0.12|
|randomseed    设随机数种子|     math.randomseed(os.time())|     
|random    取随机数|     math.random(5,90)    |5~90|
|rad    角度转弧度|     math.rad(180)|3.1415926535898|
|deg    弧度转角度|     math.deg(math.pi)    |180|
|exp    e的x次方|     math.exp(4)|     |54.598150033144|
|log    计算x的自然对数|     math.log(54.598150033144)|    4|
|log10    计算10为底,x的对数|     math.log10(1000)|    3|
|frexp    将参数拆成x * (2 ^ y)的形式|     math.frexp(160)|    0.625    8|
|ldexp    计算x * (2 ^ y)|    math.ldexp(0.625,8)|    160|
|sin          正弦|     math.sin(math.rad(30))|    0.5|
|cos    余弦|     math.cos(math.rad(60))|    0.5|
|tan    正切|     math.tan(math.rad(45))|    1|
|asin    反正弦|     math.deg(math.asin(0.5))|    30|
|acos    反余弦    | math.deg(math.acos(0.5))|    60|
|atan    反正切|     math.deg(math.atan(1))|    45|

7.IO库

1、io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述

  io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr

2、文件句柄直接调用方式,即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄

  多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil

7.1 io.close ([file])

  功能:相当于file:close(),关闭默认的输出文件

7.2、io.flush ()

  功能:相当于file:flush(),输出所有缓冲中的内容到默认输出文件
io.input ([file])
就是输入文件啊

7.3、io.lines ([filename])

  功能:打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件

  若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件

  如:
  
   for line in io.lines(“main.lua”) do

   print(line)

   end

7.4 io.open (filename [, mode])

  功能:按指定的模式打开一个文件,成功则返回文件句柄,失败则返回nil+错误信息

  mode:

  “r”: 读模式 (默认);

  “w”: 写模式;

  “a”: 添加模式;

  “r+”: 更新模式,所有之前的数据将被保存

  “w+”: 更新模式,所有之前的数据将被清除

  “a+”: 添加更新模式,所有之前的数据将被保存,只允许在文件尾进行添加

  “b”: 某些系统支持二进制方式

7.5、io.output ([file])

  功能:相当于io.input,但操作在默认输出文件上

7.6、io.popen ([prog [, mode]])

  功能:开始程序prog于额外的进程,并返回用于prog的文件句柄(并不支持所有的系统平台)

7.7、io.read (…)

  功能:相当于io.input():read

7.8、io.tmpfile ()

  功能:返回一个临时文件句柄,该文件以更新模式打开,程序结束时自动删除

7.9、io.type (obj)

  功能:检测obj是否一个可用的文件句柄

  返回:

  “file”:为一个打开的文件句柄

  “closed file”:为一个已关闭的文件句柄

  nil:表示obj不是一个文件句柄

7.10、io.write (…)

  功能:相当于io.output():write

7.11、file:close()

  功能:关闭文件

  注:当文件句柄被垃圾收集后,文件将自动关闭。句柄将变为一个不可预知的值

7.12、file:flush()

  功能:向文件写入缓冲中的所有数据

7.13、file:lines()

  功能:返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,但不关闭文件

  如:for line in file:lines() do body end

7.14、file:read(…)

  功能:按指定的格式读取一个文件,按每个格式函数将返回一个字串或数字,如果不能正确读取将返回nil,若没有指定格式将指默认按行方式进行读取

  格式:

  “*n”: 读取一个数字

  “*a”: 从当前位置读取整个文件,若为文件尾,则返回空字串

  “*l”: [默认]读取下一行的内容,若为文件尾,则返回nil

  number: 读取指定字节数的字符,若为文件尾,则返回nil;如果number为0则返回空字串,若为文件尾,则返回nil;

7.15、file:seek([whence][,offset])

  功能:设置和获取当前文件位置,成功则返回最终的文件位置(按字节),失败则返回nil加错误信息

  参数

  whence:

  “set”: 从文件头开始

  “cur”: 从当前位置开始[默认]

  “end”: 从文件尾开始

  offset:默认为0

  不带参数file:seek()则返回当前位置,file:seek(“set”)则定位到文件头,file:seek(“end”)则定位到文件尾并返回文件大小

7.16、file:setvbuf(mode,[,size])

  功能:设置输出文件的缓冲模式

  参数

  mode:

  “no”: 没有缓冲,即直接输出

  “full”: 全缓冲,即当缓冲满后才进行输出操作(也可调用flush马上输出)

  “line”: 以行为单位,进行输出(多用于终端设备)

  最后两种模式,size可以指定缓冲的大小(按字节),忽略size将自动调整为最佳的大小

7.17、file:write(…)

  

8.OS库

8.1 os.clock ()

功能:返回一个程序使用CPU时间的一个近似值
os.date ([format [, time]])
功能:返回一个按format格式化日期、时间的字串或表
若设置time参数,则按time指定的时间格式化,否则按当前时间格式化
参数:
format:
“!”:按格林尼治时间进行格式化。
    “t”:将返一个带year(4位),month(1-12), day (1–31), hour (0-23), min (0-59), sec (0-61), wday (星期几, 星期天为1), yday (年内天数), and isdst (是否为日光节约时间true/false)的带键名的表; 若没有”t”则返回一个按C的strftime函数格式化的字符串
若不带参数,则按当前系统的设置返回格式化的字符串 os.date() <=> os.date(“%c”)

8.2 os.difftime (t2, t1)

功能:返回t1到t2相差的秒数

8.3 os.execute ([command])

功能:相当于C的system函数,返回系统状态码

8.4 os.exit()

功能:相当于C的exit函数,终止主程序,code为返回值

8.5 os.getenv (varname)-

功能:返回当前进程的环境变量varname的值,若变量没有定义时返回nil

8.6 os.remove (filename)

功能:删除文件或一个空目录,若函数调用失败则返加nil加错误信息

8.7 os.rename (oldname, newname)

功能:更改一个文件或目录名,若函数调用失败则返加nil加错误信息

8.8os.setlocale (locale [, category])

功能:设置程序的当前设置,函数返回最新的值,失败则返回nil
参数:
  locale:一个指定当前设置的字串
      “”:一个空字串,当前设置被视为本地设置
     “c”:当前设置被视为标准c设置
     nil:返回category指示设置名的当前值
  category:一个描述要更改的设置名
“all”[默认], “collate”, “ctype”, “monetary”, “numeric”, “time”

8.9 os.time ([table])

功能:按table的内容返回一个时间值(数字),若不带参数则返回当前时间table的字段:

8.10 os.tmpname()

功能:返回一个临时文件名