Skip to content

6.9 - OS相关操作

本库的通过 os 表实现。

os.clock ()

返回当前程序所使用的CPU时间的近似秒数表示,底层使用的是ISO标准C函数 clock 。

os.date ([format [, time]])

返回包含了日期和时间的字符串或表,其按照所给字符串参数 format 来格式化的。

如果传入了参数 time ,则使用这个时间来格式化(关于该值的描述请参见os.time)。否则,date 会使用当前时间来格式化。

如果 format 参数由 '!' 开头,那么日期会使用协调世界时格式化。在该选项字符的后边,format 内容为 "*t" 时,date 会返回带有这些属性的表:year、month (1–12)、day (1–31)、hour (0–23)、min (0–59)、sec (0–61,因为有闰秒)、wday (星期几,1–7,周日为1)、yday (本年中的第多少天,1–366)、以及 isdst (布尔值,其为夏令时标志)。如果没有可用的相关信息,最后一个属性可能会缺省。

如果 format 参数不为 "*t",那么 date 会返回表示日期的字符串,格式化规则同ISO标准C函数 strftime 。

如果 format 缺省,则默认为 "%c",其会给出一个人类可读的日期,并且使用本地的表示方法。

在非POSIX系统上,该函数可能并不是线程安全的,因为其依赖于C函数 gmtime 和 localtime 。

os.difftime (t2, t1)

返回时间 t1 和 t2 秒数之间的差距(此处的时间为os.time所返回的结果)。在POSIX、Windows、以及其他的系统上,该值就是 t2-t1 。

os.execute ([command])

该函数等效于ISO标准C函数 system 。其通过操作系统的 shell 来执行传入的 command 参数。如果命令成功结束则第一个结果会返回true,否则返回false。在第一个返回值后该函数会返回一个字符串加上一个数字,如下所示:

  • "exit": 命令正常结束;后边跟一个表示命令退出状态码的数字。
  • "signal": 命令因为收到一个系统信号结束;后跟的数字是结束这个命令的信号。

如果缺省了 command 参数,那么 os.execute 则会返回一个布尔值,该布尔值为true时表示系统的 shell 可用。

os.exit ([code [, close]])

调用ISO标准C函数 exit 以结束宿主程序。如果 code 参数为true,则会返回状态码 EXIT_SUCCESS ;如果 code 参数为false,则会返回状态码 EXIT_FAILURE ;如果 code 参数是一个数字,则会将这个数字作为状态码返回。code 默认为 true

当可选参数 close 为真值是,该函数会在退出前关闭Lua状态机(参见 lua_close)。

os.getenv (varname)

获取当前进程中名为 vername 的环境变量,如果变量未定义则返回fail

os.remove (filename)

删除给定名称相应的文件(或者在POSIX系统中可以删除空目录)。如果函数执行失败,则返回fail加上一个描述错误的字符串以及错误码。否则返回true

os.rename (oldname, newname)

将名为 oldname 的目录或文件重命名为 newname 。如果函数执行失败,则返回fail加上一个描述错误的字符串以及错误码。否则返回true

os.setlocale (locale [, category])

当前程序的本地设置。参数 locale 是一个描述了具体设置的与系统相关的字符串;参数 category 是一个字符串选项,用以描述改变哪个本地项,各项为: "all"、"collate"、"ctype"、"monetary"、"numeric"、或是 "time";默认值为 "all"。该函数会返回新的本地项名称,或者在修改申请不能通过时则会返回fail

如果 locale 参数是一个空字符串,则当前的本地项会被设为一个提前实现定义好的原生本地项。例如当 locale 是字符串 "C",则当前的本地项被设置标准C设置。

当第一个参数为nil时,该函数仅仅返回当前本地项中所给类的名称。

该函数可能不是线程安全的,因为其依赖于C函数 setlocale 。

os.time ([table])

不带参数调用该函数时会返回当前时间。或者可以根据给定的参数数来使得返回表示当地日期和时间。此处作为参数的表必须年月日含有字段—— year、month 和 day,或者可选包含字段 hour(默认为12)、min(默认为0)、sec(默认为0)、以及 isdst(默认为nil)。其他的字段会被忽略。对于这些字段的相关描述,请参见os.date函数。

调用函数时,这些字段的值不用必须在其有效范围之内。例如,当 sec 为 -10 时,其表示提前于其他字段所表示的时间10秒;如果 hour 为1000,则表示提前于其他字段所表示的时间1000个小时。

返回值是一个数字,其含义取决于你的系统。在 POSIX、Windows 以及一些其他的系统上,这个数字表示从某些给定时间("epoch")开始的秒数。在其他系统上,其没有用以表示的含义,该数字只是由 time 函数所返回,可用于作为os.dateos.difftime的参数。

当传入一个表来调用该函数时, os.time 中使用的所有字段也遵循和os.date函数中所描述中的规范,所以它们都表示在调用前相同的时间,但是取值于各自的有效范围。

os.tmpname ()

返回一个字符串,其可以用作临时文件的文件名。该文件必须在使用前显式地打开,并且当再也不需要时显式地删除。

在POSIX系统中,该函数还会创建同名文件,以避免冲突的风险。(也许同时有其他地方在创建这个文件。)你仍然需要打开这个文件并删除它(直到你不在用它为止)。

如果可以的话,你也许更喜欢用io.tmpfile,其会在程序结束时自动删除文件。