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 |
Lua 学习之基础篇五<Lua OS 库>的更多相关文章
- Lua 学习之基础篇七<Lua Module,Package介绍>
Lua 之Module介绍 包管理库提供了从 Lua 中加载模块的基础库. 只有一个导出函数直接放在全局环境中: [require]. 所有其它的部分都导出在表 package 中. require ...
- Lua 学习之基础篇四<Lua table(表)>
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>
引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...
- Lua 学习之基础篇十<Lua 常见的语法规则>
下面讲一些lua 常见的用法和规则,可以为学习理解lua带来帮助,最后附上的部分是lua的基本操作,基本包含所有常用语法语句. 1. if判断 lua把 nil 和false 视为"假&qu ...
- Lua 学习之基础篇一<Lua 运算符>
引言 由于刚接触lua,个人觉得接触一门新语言,就要一定要对基础的部分做一个快速了解. 于是参考网上相关资料吸收并整理下来作为笔记,模糊的时候用来回顾一下. 这些部分基本都是经过自己手动测试梳理过,没 ...
- Lua 学习之基础篇九<Lua 协同程序(Coroutine)>
引言 讲到协程,首先来介绍一下线程和协程的区别 lua协程和多线程 相同之处:拥有自己独立的桟.局部变量和PC计数器,同时又与其他协程共享全局变量和其他大部分东西 不同之处:一个多线程程序可以同时运行 ...
- Lua 学习之基础篇六<Lua IO 库>
引言 I/O 库提供了两套不同风格的文件处理接口. 第一种风格使用隐式的文件句柄: 它提供设置默认输入文件及默认输出文件的操作, 所有的输入输出操作都针对这些默认文件. 第二种风格使用显式的文件句柄. ...
- Lua 学习之基础篇八<Lua 元表(Metatabble)&&继承>
讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table val ...
- Lua 学习之基础篇三<Lua 字符串操作>
Lua字符串可以使用以下三种方式表示: 单引号间的一串字符. 双引号间的一串字符. [[和]]间的一串字符. string = [["Lua"]] print("字符串 ...
随机推荐
- webstorm2017中添加git
1.pc中先安装git 2.在webstorm中选择VCS -> Checkout from Version Control -> Git Git Repository URL: [gi ...
- 综合练习2 设置访问权限,Easy-IP访问外网,内外网访问
实验拓扑图: 实验要求: 1.pc.路由.交换基本配置,vlan间路由互通. 2.vlan20.vlan30可以访问FTP,VLAN10不允许访问FTP. 3.AR1通过easy-ip方式实现私网地址 ...
- 如何保持人际关系zz
作者:Faaany链接:https://www.zhihu.com/question/35590289/answer/63675007来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- [转帖]微软宣布即将开始大规模推送Windows 10 V1903重大版本更新
微软宣布即将开始大规模推送Windows 10 V1903重大版本更新 https://www.cnbeta.com/articles/tech/894303.htm 微软要批量更新 1903了 bu ...
- 在Ubuntu中安装了MongoDB后无法启动mongod的问题
今天准备学习MongoDB,没想到下载之后服务器端启动不了,记录一下问题和处理过程 一.安装 在Ubuntu中安装还是很简单,直接:sudo apt install mongodb 二.启动 启动Mo ...
- C++:链表(有头链表)
介绍 把链表分为无头链表和有头链表. 无头链表:所有的节点都包含了有效数据,上一篇文章中演示代码使用的就是无头链表. 有头链表:用一个固定的头节点来指代整个链表,所有的对象都挂在这个头节点下面,而头节 ...
- Qt程序开机自动运行
一.写入注册表需要管理员权限 1.开发中生成并运行程序需要写入注册表时,应该以管理员权限打开项目: 2.点击程序运行需要写入注册表,则应该以管理员权限打开此程序. 二.实现 void MoreSetW ...
- C++ algorithm算法库
C++ algorithm算法库 Xun 标准模板库(STL)中定义了很多的常用算法,这些算法主要定义在<algorithm>中.编程时,只需要在文件中加入#include<algo ...
- PHP7有没有你们说的那么牛逼
男人不能快,但程序一定要快.PHP7到底快不快,我们拭目以待. PHP7来一发 PHP7正式发布到现在已经一年半了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍, ...
- Spring (2)框架
Spring第二天笔记 1. 使用注解配置Spring入门 1.1. 说在前面 学习基于注解的IoC配置,大家脑海里首先得有一个认知,即注解配置和xml配置要实现的功能都是一样的,都是要降低程序间的耦 ...