Lua os库

作者: SimanX | 来源:发表于2017-11-29 16:10 被阅读0次
前言

也做过几次需要使用到time和date的需求了,每次都要百度找一遍,感觉有点蛋疼,所以干脆花点时间研究并记录下这个时常要用到,但是又总是会忘记的这两个东西,刚好在os库里面,就干脆一起记录下来
申明下:这里面的东西我也是边学边记录的,如有错误,欢迎指出,谢谢。

一、开始研究

首先,要明白os库是什么:
os:操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。

二、Lua中的os库

话不多说,看标题就知道,既然是库,我们要用,知道接口就行了。
下面是从Lua官网上面找到的os库的对应接口。

  os.clock        程序使用CPU时间的一个近似值
  os.execute   执行命令
  os.time         获取时间戳
  os.date         根据参数返回对应格式的时间字符串
  os.difftime    获取两个时间戳的差值
  os.exit          退出
  os.getenv    获取系统信息的函数
  os.remove   删除文件或一个空目录
  os.rename   更改一个文件或目录名
  os.setlocale 设置程序的当前区域
  os.tmpname 返回一个临时的文件名
2.1 os.clock
2.1.1 简介和执行

这是一个比较有意思的函数,我的感觉是类似Unity里面的Time.time,也就是这个程序从一开始就记住了程序开始的时间,然后调用这个函数的时候执行了当前时间减去开始时间,然后得出值并且返回出来。

随便运行下
2.1.2 用法

从上面可以看出,os.clock有和Time.time一样的作用,可以用来知道某段代码执行消耗了多少时间,从而对代码进行针对性的修改

-- This is test.lua
local start_time = os.clock()
print("100000000次循环开始时间 : " .. start_time)

for i = 1, 100000000 do end

local end_time = os.clock()
print("100000000次循环开始时间 : " .. end_time)
print("100000000次循环消耗时间 : " .. (end_time - start_time))
执行效果.png
2.1.3 注意点

这个函数接触的不多,真正开发过程中很少有用到,百度一下,需要注意的是os.clock()有可能返回负值,原因是这个函数是用C来实现的,数字溢出会进行截断导致出现负数,而且在某些平台实现clock()和C标准不一样,会返回负值。


摘抄自网络

看看这个值,妈呀,这么大都还是正常的,那么如果要在这个CPU使用时间还用os.clock(),那还不如自己用时间戳在开始使用的时候记录下时间,然后要用的时候自己进行减法,误差也不会很大,所以只推荐用来计算某段代码执行消耗了多少时间。

2.2 os.execute
2.2.1 简介和执行

os.execute(cmd)

这是个很简单的函数了,就是在终端上执行命令,一般Unity开发中很少用到,很多语言也有类似这个作用的API供调用。 随便运行下.png
2.2.2 用法

开发过程中基本没用过,如果要用,根据它的定义,可以写脚本在终端执行命令,进行操作,不过,想想,这还不如直接写shell或者bat批处理来实现,还少了一层Lua。

2.3 os.time
2.3.1 简介和执行

os.time(date_tbl)
获取date_tbl这个表中存储(默认为当前时间)的时间距离格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)的秒数,也就是时间戳。


随便运行下
2.3.2 用法

时间戳的作用,那就多了去了,这是个神奇的东西

  • 完全可以实现上面os.clock()的作用,只不过精确到秒,但是在一般情况基本是够用了的。
  • 可以用来保存数据的唯一性,例如一个订单,可以在某个位置开始存储一个时间戳,到时候回看的时候一看就知道订单创建的时间。
  • 可以存储在数据库中,用来存储用户某个操作的时间,例如,每日活动,用时间戳存储起来,然后再用等下要记录的os.date()获取日期,判断是否是同一天,进行对应的操作。
  • ...........
-- This is test.lua
local function dosomethings(things)
    for i = 1, #things do
        print(string.format("you are %s at %d", things[i], os.time()))
        -- cmd暂停1秒,-n 2表示发包两次,1秒1次
        --直接执行的时候发了一个,所以发两个,即实现了暂停1秒的效果
        os.execute("ping 127.0.0.1 -n 2 > nul")  
    end
end

dosomethings({"起床", "刷牙", "洗脸", "上班", "加油"})
执行结果.png
2.4 os.date
2.4.1 简介和执行

首先,我记录os这个库的原因,就是因为这个函数,每次使用都要去百度上查一次,很麻烦,所以自己记录下,这个函数会写得比较多。

os.date(fmt, timestamp)
第一个参数是时间格式,默认为"%y%m%d %H:%M:%S",第二个参数是时间戳对应的number值,timestamp可以不传,默认为当前时间戳,即os.time()


随便运行下
2.4.2 用法
  1. os.date("t")
    os.date("
    t", timestamp) ,返回timestamp(默认当前时间)的date_tbl,可以说是和os.time(date_tbl)相对应,这两个函数可以相互照应写一直执行来执行去。
-- This is test.lua
local date_tbl = os.date("*t")
for i, v in pairs(date_tbl) do
    print(i .. " = ", v)
end
os.date("*t")
  1. 根据需要的格式获取对应日期值
格式符 含义 具体示例(范围均为闭区间)
%a 一星期中天数的简写 Sat
%A 一星期中天数的全称 Saturday
%b 月份的简写 Dec
%B 月份的全称 December
%c 日期和时间 12/02/17 14:42:07 (注解:17年12月2日)
%d 一个月中的第几天 02 范围:(01-31)
%H 小时制中的小时数 14[00 - 23]
%I 12小时制中的小时数 02[01 - 12]
%M 分钟数 42[00 - 59]
%m 月份数 12[01 - 12]
%P 上午或下午 (pm) [ {am, pm}]
%w 一星期中的第几天 6[0 - 6 = 星期天 - 星期六]
%W 一年中的第几个星期 48
%x 日期 12/02/17
%X 时间 14:42:07
%y 两位数的年份 17[00 - 99]
%Y 完整的年份 2017
%% 字符串'%' %

示例

local fmt = [[
    %%a = %a,   一星期中天数的简写
    %%A = %A,   一星期中天数的全称
    %%b = %b,   月份的简写
    %%B = %B,   月份的全称
    "%% = %c,   日期和时间"
    %%d = %d,   一个月中的第几天
    %%H = %H,   小时制中的小时数
    %%I = %I,   12小时制中的小时数
    %%M = %M,   分钟数
    %%m = %m,   月份数
    %%p = %p,   上午或下午
    %%w = %w,   一星期中的第几天
    %%W = %W,   一年中的第几个星期
    %%x = %x,   日期
    %%X = %X,   时间
    %%y = %y,   两位数的年份
    %%Y = %Y,   完整的年份
    %%%% = %%,   字符串%%
]]
print(os.date(fmt))
运行结果

看完上面,表示这个东西,好强大,感觉需要的东西都在这里面了。这里郑重表示下,我写这篇东西,就是因为看一篇Lua Date的文章,里面少了一个%W,这个获取一年中第几个星期的解释,搞得我写了一个算法,提交上去,同事告诉我有这个东西,然后重新写了一遍,难受,所以才来记录的,百度上面没找到,但是,google上面找到了,这个坑,我会记住的。。。。

2.5 os.difftime
2.5.1 简介和执行

os.difftime (t2, t1),获取t1到t2之间的秒数差


随便运行下

看了上面这个,你还有什么其他想法吗,还要记住是前面那个减去后面那个,还不如我自己直接去减。如果有谁知道这东西有什么神奇的用法,欢迎评论。

接下来的东西就不自己写了,前面的东西其实也是我一路找过来的,只是那些都比较重要而且常用,所以还是自己记录下来了(os.clock除外,这个东西我也没用过几次),刚好写的时候边写边找,看到一个简书作者,写的都挺好,而且还结合了C,而且,接下来的几个函数他都有记录,干脆就引用下,写在文章最后,再次也鸣谢下作者AlbertS

相关文章

  • Lua库函数概览

    Lua库函数概览数学库 table库 字符串库 IO库 os库 调试库

  • Lua os库

    前言 也做过几次需要使用到time和date的需求了,每次都要百度找一遍,感觉有点蛋疼,所以干脆花点时间研究并记录...

  • lua 脚本安装

    http://www.runoob.com/lua/lua-environment.html Mac OS X 系...

  • nginx(openrestry)实现动态负载均衡

    nginx配置 lua文件 相关Lua库 json解析库:https://github.com/mpx/lua-c...

  • Lua与C交互简介

    Lua资源获取### Lua各个平台动态库与静态库下载地址Lua源码下载地址 交互原理#### 要理解Lua与C的...

  • Lua os.time

    Lua 的 os.time 传入的int值范围

  • lua在mac上的安装以及遇到Permission denied

    Mac OS X 系统上安装lua 5.3.0版本,输入: curl-R-O http://www.lua.org...

  • Lua-os

    简介 实例 os.clock(time) 返回执行该程序CPU花去的时钟秒数start=os.clock()whi...

  • Lua C API

    C API 云风Blog:Lua C API 的正确用法 C读取和调用Lua文件的库:lua.h, lauxlib...

  • 2017.5.31

    lua 学习require(modename)数学库 mathtable库 : insert remove con...

网友评论

      本文标题:Lua os库

      本文链接:https://www.haomeiwen.com/subject/vyttlxtx.html