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
。