快速掌握Lua 5.3 —— 操作系统库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/VermillionTear/article/details/50815347

Q:与文件操作相关的库方法?

A:

--[[ os.remove(filename)
     删除文件名为"filename"的文件,"filename"可以是一个普通文件或是一个空的目录。
     如果删除失败,则返回"nil"加上错误描述以及错误码。]]
print(os.remove("existent-file"))    --> true
print(os.remove("non-existent-file"))
--> nil    non-existent-file: No such file or directory    2
print(os.remove("empty-directory"))    --> true
print(os.remove("non-empty-directory"))
--> nil    non-empty-directory: Directory not empty    39

--[[ os.rename(oldname, newname)
     将文件"oldname"重命名为"newname"。
     如果重命名失败,则返回"nil"加上错误描述以及错误码。]]
print(os.rename("existent-file", "file"))    --> true
print(os.rename("existent-file", "file"))
--> nil    No such file or directory    2

--[[ os.tmpname()
     返回一个可用于临时文件的文件名字符串,并创建该文件。
     这个文件在使用前必须显式打开,不再使用时需要显式删除(即使你没有使用它)。
     只要有可能,请使用"io.tmpfile()",因为该文件可以在程序结束时自动删除。]]
print(os.tmpname())    --> /tmp/lua_9zFiDU

Q:与时间操作相关的库方法?

A:

--[[ os.time([table])
     当不指定"table"时,返回当前时间距离某个特定时间的秒数。
     在我的电脑上,这个特定的时间是"08:00:00 UTC, January 1, 1970"。
     当指定"table"时,返回当前时间距离"table"指定的时间的秒数。
     "table"中可包含如下域:
     year     任意数字表示某一年,必填。
     month    01-12,必填。
     day      01-31,必填。
     hour     01-31,选填,默认为12。
     min      00-59,选填,默认为0。
     sec      00-59,选填,默认为0。
     isdst    一个"bool"值,"true"为使用夏令时,"false"为不使用,默认"false",可选。
     该方法的返回值最好不要直接使用,而是传递给"os.date()"格式化输出时间。]]
print(os.time())    --> 1457270963
print(os.time{year=1970, month=1, day=1})    --> 14400
print(os.time{year=1970, month=1, day=1, hour=8})    --> 0
print(os.time{year=1970, month=1, day=1, hour=8, sec=1})    --> 1

--[[ os.date([format [, time]])
     以给定的"format"格式化指定的时间"time""format"可以指定为如下值:
     %a    简写星期(例如,Sun)。
     %A    非简写星期(例如,Sunday)。
     %b    简写月份(例如,Mar)。
     %B    非简写月份(例如,March)。
     %c    星期,月份,日,时间,年份(例如,Sun Mar  6 22:50:56 2016)。
     %d    日,"01-31"的格式(例如,06)。
     %H    小时,24小时制,"00-23"的格式(例如,22)。
     %I    小时,12小时制,"01-12"的格式(例如,10)。
     %M    分钟,"00-59"的格式(例如,50)。
     %m    月,"01-12"的格式(例如,03)。
     %p    上午或下午,"AM""PM"。
     %S    秒,"00-59"的格式(例如,56)。
     %w    数字格式的星期,"0-6"的格式,"0"代表"Sunday",以此类推。
     %x    日期,"MM/DD/YY"的格式(例如,03/06/16)。
     %X    时间,"hh/mm/ss"的格式(例如,22:50:56)。
     %Y    非简写年份(例如,2016)。
     %y    简写年份,"00-99"的格式(例如,16)。
     %     转义字符(例如可转义'%'本身)。
     *t    返回有如下域的"table":
           year       年份
           month      月份
           day        日
           hour       小时
           min        分钟
           sec        秒
           wday       数字格式的星期,"1"是周日,之后以此类推
           yday       数字格式的年份,"1"是一月,之后以此类推
           isdst      是否使用夏令时
     无    默认使用"%c""time"是一个距离某个特定时间的秒数。由于不同机器所使用的特定的时间不同,
     所以最好使用"os.time()"的返回值作为此参数的值。默认使用"os.time()"的返回值。]]
print(os.date())    --> Sun Mar  6 23:33:31 2016
print(os.date("%A"))    --> Sunday
print(os.date("%c", 0))    --> Thu Jan  1 08:00:00 1970
for k, v in pairs(os.date("*t")) do print(k, v) end
--[[ result: 
     hour       23
     isdst      false
     year       2016
     sec        8
     wday       1
     min        15
     yday       66
     day        6
     month      3]]
print(os.date("Today is %A, in %B."))    --> today is Sunday, in March.

--[[ os.clock()
     返回程序所使用的CPU时间的近似值(以秒为单位)。]]
-- 典型的应用是计算程序耗时。
local x = os.clock()
local s = 0
for i = 1, 100000 do s = s + i end
print(string.format("elapsed time: %.2f", os.clock() - x))
--> elapsed time: 0.01
for i = 1, 100000000 do s = s + i end    -- 增加循环的次数,使用的时间增长。
print(string.format("elapsed time: %.2f", os.clock() - x))
--> elapsed time: 2.38

--[[ os.difftime(t2, t1)
     返回以秒为单位的"t2"与"t1"之间的时间差,返回值依旧是以秒为单位。]]
t1 = os.time()
t2 = os.time()
print(t1, t2)    --> 1457363213    1457363219
print(os.difftime(t2, t1))    --> 6.0

Q:与系统操作相关的库方法?

A:

--[[ os.execute([command])
     与C语言中的"execute()"功能相同,将"command"命令传递给shell执行。
     如果执行成功,第一个参数返回"true",否则返回"nil"。
     第二个和第三个参数分别返回一个字符串和一个数字,
     如果第二个参数返回"exit",代表命令正常退出,第三个参数代表退出状态;
     如果第二个参数返回"signal",代表命令被信号终端,第三个参数代表中断的信号。
     当不提供"command"命令时,如果shell可用,则返回"true",否则返回"false"。
     只有此时返回一个参数。]]
print(os.execute())    --> true
print(os.execute("mkdir"))
--[[ result: 
     mkdir: 缺少操作数
     Try 'mkdir --help' for more information.
     nil    exit    1]]
print(os.execute("mkdir dir"))    --> true    exit    0

--[[ os.exit([code [, close]])
     调用C语言中的"exit()"终止程序的运行。
     如果"code""true",则返回"EXIT_SUCCESS";如果为"false",则返回"EXIT_FAILURE";
     如果为一个数值,则返回该数值。默认为"true"。
     如果"close""true",则在终止之前关闭"Lua state"。]]

--[[ os.getenv(varname)
     获取系统环境变量"varname"的值,如果该变量不存在,则返回"nil"。]]
print(os.getenv("HOME"))    --> /home/vermilliontear
print(os.getenv("MYVAR"))    --> nil
> export MYVAR=9"    -- 在shell中执行。
print(os.getenv("MYVAR"))    --> 9

附加:

1、实际上%x%X以及%c的最终显示格式依赖于操作系统。例如在某些系统上%x以”MM/DD/YY”的形式显示,而在另一些系统上是以”YY/MM/DD”的形式显示。
如果想明确的使用某种格式,最好指定明确的”format”,例如%m/%d/%Y

猜你喜欢

转载自blog.csdn.net/VermillionTear/article/details/50815347
5.3