第二十二课 操作系统库

操作系统库定义在table os中,其中包含了文件操作函数、获取当前日期和时间 的函数,以及其他一些与操作系统相关的功能。Lua只使用了 ANSI标准中定义的函数,而像目录操作和套接字这类操作系统功能并不是ANSI标准的一部分,因此操作系统库也就不包含它们了。
posix库为Lua提供了POSIX.1标准的功能
luasocket库提供了网络支持
对于文件操作而言,库只提供了两个函数,一个是文件改名os.rename,一个是删除文件os.remove。

日期和时间
time和date提供了所有的日期和时间功能
不带任何参数调用time,它会以数字形式返回当前的日期和时间。
用一个table作为参数调用它,会返回一个数字,表示该table中所描述的日期和时间,table的有效字段:
year 一个完整的年份
month 01-12
day 01-31
hour 00-23
min 00-59
sec 00-59
isdst 一个布尔值,true表示夏令时
前三个字段是必须要有的,其他字段默认为中午(12:00:00)。
print(os.time{year = 1970, month = 1, day = 1, hour = 8, sec = 1}) -->1
函数date是time 的一个反函数,它可以将一个表示日期和时间的数字转换成某些高级的表现形式。其第一个参数是格式化字符串,指定了期望的表示形式;第二个参数是日期和时间的数字,默认为当前日期和时间。
为了生成一个日期table,可以使用格式字符串“*t”。
function printDate (d)
local f = function(d) if d.isdst then return "true" else return "false" end end
print(string.format("year=%d, month=%d, day=%d, yday=%d, wday=%d, hour=%d, min=%d, sec=%d, isdst=%s", d.year, d.month, d.day, d.yday, d.wday, d.hour, d.min, d.sec, f(d)))
end

d = os.date("*t", 906000490)
printDate(d) -->year=1998, month=9, day=17, yday=260, wday=5, hour=10, min=48, sec=10, isdst=false
wday表示星期数(1表示星期天)
yday表示1年中的第几天(1是一月一日)
而对于其他格式字符串,os.date会将日期格式化为一个字符串,这个字符串是传入格式字符串的一个复制,但其中某些特殊标记被替换成了时间和日期信息。所有的标记都以“%”开头,并伴随一个字母,例如:
print(os.date("Today is %A, in %B")) -->Today is Tuesday, in January
print(os.date("%x", 906000490)) -->09/17/98
所有的表现形式取决于当前的区域设置。

下表列出了所有的标记以及其含义,这些 标记说明中使用的示范时间为1998年9月16日(星期三)23:48:10。对于数字值,表中也列出了它们的有效范围:
%a 一星期中天数的简写(例如:Wed)
%A 一星期中天数的全称(例如: Wednesday)
%b 月份的简写(例如:Sep)
%B 月份的全称(例如:September)
%c 日期和时间(例如:09/16/98 23:48:10)
%d 一个月中的第几天(16)[01~31]
%H 24小时制中的小时数(23)[00~23]
%I 12小时制中的小时数(11)[00~12]
%j 一年中的第几天(259)[001~366]
%M 分钟数(48)[00~59]
%m 月份数(09)[01~12]
%p “上午(am)”或“下午(pm)”(pm)
%S 秒数(10)[00~59]
%w 一星期中的第几天(3)[0~6=星期天~星期六]
%x 日期(例如:09/16/98)
%X 时间(例如:23:48:10)
%y 两位数的年份(98)[00~99]
%Y 完整的年份(1998)
%% 字符"%"

如果不带任何参数调用os.date函数,它会使用格式%c,即以一种合理的格式表示完整的日期和时间信息。另外,%x、%X和%c会根据不同的 区域和系统而发生变化。如果需要一种固定的表示形式,例如mm/dd/yyyy,可以使用显式的格式字符串“%m/%d/%Y”。
函数os.clock会返回当前CPU时间的描述, 一般可用于计算一段代码的执行时间:
local x = os.clock()
local s = 0
for i = 1, 100000000 do s = s + i end
print(string.format("elapsed time: %.2f\n", os.clock() - x)) -->1.02

其他系统调用
os.exit 中止当前程序的执行
os.getenv 获取一个环境变量的值,并接受一个变量名,返回对应的字符串的值 print(os.getenv("HOME")) -->/home/lua 若一个环境变量未定义,则返回nil。
os.execute 可运行一条系统命令,它等价于C语言中的system函数。它需要接收一个命令字符串,并返回一个错误 代码。例如:
function createDir (dirname)
os.execute("mkdir" .. dirname)
end

os.setlocale 设置当前Lua程序所使用的区域。区域定义了不同文件或不同语言间的差异之处。setlocale函数有两个字符串参数区域名和分类名,分类参数指定了区域参数中 哪组特征将起作用。区域中有6中分类:
collate 控制 字符串的字母顺序
ctype 控制单个字符的类型以及其大小写间的转换
monetary 不影响Lua程序
numeric 控制如何 格式化数字
time 控制如何格式化日期和时间
all 控制上述所有的功能,默认的分类是“all”
setlocale函数会返回区域名,如果失败则返回nil。
print(os.setlocale("ISO-8859-1", "collate"))



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值