Lua 学习之基础篇五<Lua 之 OS 库>

lua os库提供了简单的跟操作系统有关的功能

1.os.clock()

返回程序所运行使用的时间

local nowTime = os.clock()
print("now time is ",nowTime)
local s = 0
for i = 1,100000000 do
    s =s+i
end
spendTime = os.clock() - nowTime
print(string.format("Spend time is : %.2f\n", spendTime))
-- now time is  0.002841
-- Spend time is : 0.66

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

用来格式化时间戳为可读时间,time为可选时间戳,省略时取当下


local now = os.date()
print("current time is ",now)
--current time is   Mon Nov  4 09:00:49 2019

local now = os.date("%Y-%m-%d %H:%M:%S")
print("now time is ",now)
-- now time is  2019-11-04 09:00:49

-- %a abbreviated weekday name (e.g., Wed)
-- %A full weekday name (e.g., Wednesday)
-- %b abbreviated month name (e.g., Sep)
-- %B full month name (e.g., September)
-- %c date and time (e.g., 09/16/98 23:48:10)
-- %d 一个月里的几号[01–31]
-- %H 24小时[00–23]
-- %I 12小时[01–12]
-- %j 一年中的第几天[001–366]
-- %M 分[00–59]
-- %m 月份[01–12]
-- %p am(上午),pm(下午)
-- %S 秒[00–60]
-- %w 星期几[0–6 = 星期天–星期六]
-- %x date (e.g., 09/16/98)
-- %X time (e.g., 23:48:10)
-- %y two-digit year (98) [00–99]
-- %Y 年(1998)
-- %% the character ‘%’

local now = os.date("%Y-%m-%d %H:%M:%S")
print("now time is ",now)
--now time is   2019-11-04 09:13:47

local year = string.sub(now,1,4)
local month = string.sub(now,6,7)
local day = string.sub(now,9,10)
local hour = string.sub(now,12,13)
local minute = string.sub(now,15,16)
local second = string.sub(now,18,19)

print("now year is ",year)
print("now month is ",month)
print("now day is ",day)
print("now hour is ",hour)
print("now minute is ",minute)
print("now second is ",second)

--now year is   2019
--now month is  11
--now day is    04
--now hour is   09
--now minute is     13
--now second is     47

其中"*t":

将返一个带year(4位),month(1-12), day (1--31), hour (0-23), min (0-59), sec (0-61), wday (星期几, 星期天为1), yday (年内天数), and isdst (是否为日光节约时间true/false)的带键名的表

local now = os.date("*t")
for k ,v in pairs(now) do
    print (k ,v )
    end
--输出如下
wday    2
sec 3
hour    9
month   11
year    2019
yday    308
min 6
day 4
isdst   false

3.os.time ([table])

默认获取当前时间戳(1970到现在的秒数),也可以指定table参数


local now = os.date("%Y-%m-%d %H:%M:%S")
print("now time is ",now)
--now time is    2019-11-04 09:27:13

local year = string.sub(now,1,4)
local month = string.sub(now,6,7)
local day = string.sub(now,9,10)
local hour = string.sub(now,12,13)
local minute = string.sub(now,15,16)
local second = string.sub(now,18,19)

print("now year is ",year)
print("now month is ",month)
print("now day is ",day)
print("now hour is ",hour)
print("now minute is ",minute)
print("now second is ",second)

--now year is    2019
--now month is   11
--now day is     04
--now hour is    09
--now minute is  27
--now second is  13

--获取7天前的时间
ta = {
    year=year,
    month=month,
    day=day-7,
    hour=hour,
    min=minute,
    sec=second
}
--2018-05-02 09:50:57
local t = os.date("%Y-%m-%d %H:%M:%S", os.time(ta))
print ("the day before 7days time",t)
--the day before 7days time  2019-10-28 09:27:13

--获取本年2月份的天数
--3月份开头减去1天就是2月份的最后一天
ta = {
    year=year,
    month=3,
    day=0,
}

--28
local days = os.date("%d", os.time(ta))
print ("二月份的天数",days)
--二月份的天数 28

4.os.difftime (t2, t1)**

返回t1到t2相差的秒数

t1 = os.time();
print("t1 time is ",t1)
--t1 time is     1572830412

for i = 0, 10000000 do
 os.time();
end
t2 = os.time();
print(t2 - t1);
--1
print(os.difftime(t2, t1));
--1.0

5.os.execute ([command])

  相当于system 函数,返回执行结果,可以执行shell 语句
os.execute("lua -v")
--Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio

6.os.exit

  相当于C的exit函数,终止主程序,code为返回值

  ```lua
  function func_testexit()
      print("lua --> func_testexit start");

      io.read();

      os.exit(0);     --==>os.exit() 用法

      print("lua --> func_testexit end");

      io.read();
  end
  ```

  ```objective-c
     lua_State *L = lua_open();
      luaL_openlibs(L);

      printf("c++ --> before call func_testexit\n");

      luaL_dofile(L,"exittest.lua");              // 加载执行lua文件

      lua_getglobal(L, "func_testexit");          // 函数入栈
      lua_pcall(L, 0, 0, 0);                      // 打印信息

      printf("c++ --> after call func_testexit\n");

      lua_close(L);                               // 关闭lua环境
  ```

  ```lua
  --输出结果为:
  -- c++ --> before call func_testexit
  -- lua --> func_testexit start
  ```

  总结:

  - 需要注意的是,`os.exit()`不仅仅会退出lua运行环境,连宿主程序也会退出,代码中的`io.read();`仅仅为了可以看到打印信息,否则宿主程序直接退出就什么也看不到了。

  - 我们可以发现代码`print("lua --> func_testexit end");`和`printf("c++ --> after call func_testexit\n");`是无论如何也执行不到的。

  - 利用`os.exit()`可以退出宿主程序,我们可以在lua解释器中使用这个函数已退出解释器

其中这个函数的实现源码,其实就是调用了c语言的exit():

static int os_exit (lua_State *L) {
  exit(luaL_optint(L, 1, EXIT_SUCCESS));
}

//其中c语言中有如下定义:
/* Definition of the argument values for the exit() function */
#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1

7.os.getenv (varname)

功能:返回当前进程的环境变量varname的值,若变量没有定义时返回nil
     print(os.getenv("HOME"))
     print(os.getenv("TEMP"))

     --/Users/jason
     --nil

8.os.remove (filename)

删除文件或目录,若函数调用失败则返回nil和错误信息

9.os.rename (oldname, newname)

重命名文件或目录,失败返回nil以及错误信息

10.os.tmpname()

 返回具有可用于临时文件的文件名的字符串。该文件必须在使用前打开,并且在不需要时删除。

 io.tmpfile()产生的临时文件程序结束后会自动删除  

11.os.setlocale (locale [, category])

 解释:设置程序的当前区域,函数返回设置以后该项最新的值,如果失败则返回`nil`。

  主要用于设定不同区域,不同语言习惯

  参数:两个参数均可省略,但具体含义不同。

  locale:表示一个指定当前设置区域的字串,有几种特殊形式如下

  - "":一个空字串,当前设置被视为本地设置
  - "C":当前设置被视为标准C设置
  - nil:返回category指示设置名的当前值

  category:一个描述要更改的设置名,实际上就是制定一个分类的名字,分类如下

  - all:默认选项,包含下述所用分类。
  - collate :影响C语言函数strcoll和strxfrm
  - ctype:影响字符处理函数和多行字符处理函数
  - monetary:影响C语言函数localeconv返回的货币格式化信息
  - numeric:影响格式化输入输出字符中的小数点符号
  - time:影响C语言函数strftime
  常用语言区域:

  | 语言缩写 | 语言种类     | 语言代码 |
  | -------- | ------------ | -------- |
  | chs      | 简体中文     | 0804     |
  | cht      | 繁体中文     | 0404     |
  | jpn      | 日文         | 0011     |
  | kor      | 韩文         | 0012     |
  | dan      | 丹麦文       | 0006     |
  | deu      | 德文         | 0007     |
  | eng      | 国际英文     | 0809     |
  | enu      | 英文         | 0409     |
  | esp      | 西班牙文     | 000A     |
  | fin      | 芬兰文       | 000B     |
  | fra      | 法文(标准) | 040C     |
  | frc      | 加拿大法文   | 0C0C     |
  | ita      | 意大利文     | 0010     |
  | nld      | 荷兰文       | 0013     |
  | nor      | 挪威文       | 0014     |
  | plk      | 波兰文       | 0015     |
  | ptb      | 巴西葡萄牙文 | 0416     |
  | ptg      | 葡萄牙文     | 0816     |
  | rus      | 俄文         | 0019     |
  | sve      | 瑞典文       | 001D     |
  | tha      | 泰文         | 001E     |

原文地址:https://www.cnblogs.com/xiaoqiangink/p/12082796.html

时间: 2024-10-09 18:17:46

Lua 学习之基础篇五<Lua 之 OS 库>的相关文章

Lua 学习之基础篇七&lt;Lua Module,Package介绍&gt;

Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require (modname) 加载一个模块. 这个函数首先查找 [package.loaded] 表, 检测 modname 是否被加载过. 如果被加载过,require 返回 package.loaded[modname] 中保存的值. 否则,它会为模块寻找加载器. require 遵循 [package.

Lua 学习之基础篇十&lt;Lua 常见的语法规则&gt;

下面讲一些lua 常见的用法和规则,可以为学习理解lua带来帮助. 1. if判断 lua把 nil 和false 视为"假",其他都为"真" 2. 逻辑运算符 and or lua的and or 可以用来构成三元表达式,如下: > = 1 == 1 and 1 or 2 1 但如果是这样写,就不是你想要的结果了: > = 1 == 1 and false or true true 这是因为,and 运算符判定 false不成立,就继续执行了 or 运算

Lua 学习之基础篇六&lt;Lua 之IO 库&gt;

引言 I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. 当使用隐式文件句柄时, 所有的操作都由表 io 提供. 若使用显式文件句柄, io.open 会返回一个文件句柄,且所有的操作都由该文件句柄的方法来提供. 表 io 中也提供了三个 和 C 中含义相同的预定义文件句柄: io.stdin io.stdout io.stderr. I/O 库永远不会

Lua 学习之基础篇九&lt;Lua 协同程序(Coroutine)&gt;

引言 讲到协程,首先来介绍一下线程和协程的区别 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行几个线程(并发执行.抢占),而协程却需要彼此协作地运行,并非真正的多线程,即一个多协程程序在同一时间只能运行一个协程,并且正在执行的协程只会在其显式地要求挂起(suspend)时,它的执行才会暂停(无抢占.无并发). 注意: Lua中的协程无法在外部将其停止,有可能导致程序阻塞 运行的是主线程时调用

Lua 学习之基础篇八&lt;Lua 元表(Metatabble)&amp;&amp;继承&gt;

讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table value (global 't1') 程序会报错,因为不知道如何对两个table执行+运算,这个时候就需要通过元表来定义,有点类似c中的运算符加载.我们看一下如何通过元表实现合并操作. local mt = {} --定义mt.__add元方法(其实就是元表中一个特殊的索引值)为将两个表的元素合并后返回

一步步学习javascript基础篇(3):Object、Function等引用类型

我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂数据类型(即引用数据类型) Object类型 我们用的最多的引用类型就属object类型了,一般用来存储和传输数据是再好不过的.然,它的两种创建方式我们是否了解呢? 1.通过构造函数来创建 如: var obj = new Object(); 在js中的引用类型有个非常灵活的用法,可以动态的附加属性和赋值.

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

渗透学习笔记--基础篇--sql注入(字符型)

环境:dvwa1.7数据库:mysql前置知识:sql语句(Click me)      在进行sql注入前,我们先熟悉熟悉select语句.一.打开我们的sql终端 二.进入之后可以看到有mysql>我们输入sql语句,即可返回我们想要的结果,注意分号哟!我们使用的dvwa,在我们前几章设置的时候,会在数据库中生成一个dvwa的database:这里我们使用它来进行我们的select 语句:(1)使用dvwa数据库use dvwa;(2)在users表里查询用户名为'admin'的所有信息se

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模