快速掌握Lua 5.3 —— 操作系統庫


Q:與文件操作相關的庫方法?

A:

--[[ os.remove(filename)
刪除文件名為"filename"的文件,"filename"可以是一個普通文件或是一個空的目錄。
如果刪除失敗,則返回"nil"加上錯誤描述以及錯誤碼。]]

print(os.remove("existent-file")) --> true
print(os.remove("non-existent-file"))
--> nil non-existent-file: No such file or directory 2
print(os.remove("empty-directory")) --> true
print(os.remove("non-empty-directory"))
--> nil non-empty-directory: Directory not empty 39

--[[ os.rename(oldname, newname)
將文件"oldname"重命名為"newname"。
如果重命名失敗,則返回"nil"加上錯誤描述以及錯誤碼。]]

print(os.rename("existent-file", "file")) --> true
print(os.rename("existent-file", "file"))
--> nil No such file or directory 2

--[[ os.tmpname()
返回一個可用於臨時文件的文件名字符串,並創建該文件。
這個文件在使用前必須顯式打開,不再使用時需要顯式刪除(即使你沒有使用它)。
只要有可能,請使用"io.tmpfile()",因為該文件可以在程序結束時自動刪除。]]

print(os.tmpname()) --> /tmp/lua_9zFiDU

Q:與時間操作相關的庫方法?

A:

--[[ os.time([table])
當不指定"table"時,返回當前時間距離某個特定時間的秒數。
在我的電腦上,這個特定的時間是"08:00:00 UTC, January 1, 1970"。
當指定"table"時,返回當前時間距離"table"指定的時間的秒數。
"table"中可包含如下域:
year 任意數字表示某一年,必填。
month 01-12,必填。
day 01-31,必填。
hour 01-31,選填,默認為12。
min 00-59,選填,默認為0。
sec 00-59,選填,默認為0。
isdst 一個"bool"值,"true"為使用夏令時,"false"為不使用,默認"false",可選。
該方法的返回值最好不要直接使用,而是傳遞給"os.date()"格式化輸出時間。]]

print(os.time()) --> 1457270963
print(os.time{year=1970, month=1, day=1}) --> 14400
print(os.time{year=1970, month=1, day=1, hour=8}) --> 0
print(os.time{year=1970, month=1, day=1, hour=8, sec=1}) --> 1

--[[ os.date([format [, time]])
以給定的"format"格式化指定的時間"time"
"format"可以指定為如下值:
%a 簡寫星期(例如,Sun)。
%A 非簡寫星期(例如,Sunday)。
%b 簡寫月份(例如,Mar)。
%B 非簡寫月份(例如,March)。
%c 星期,月份,日,時間,年份(例如,Sun Mar 6 22:50:56 2016)。
%d 日,"01-31"的格式(例如,06)。
%H 小時,24小時制,"00-23"的格式(例如,22)。
%I 小時,12小時制,"01-12"的格式(例如,10)。
%M 分鍾,"00-59"的格式(例如,50)。
%m 月,"01-12"的格式(例如,03)。
%p 上午或下午,"AM""PM"
%S 秒,"00-59"的格式(例如,56)。
%w 數字格式的星期,"0-6"的格式,"0"代表"Sunday",以此類推。
%x 日期,"MM/DD/YY"的格式(例如,03/06/16)。
%X 時間,"hh/mm/ss"的格式(例如,22:50:56)。
%Y 非簡寫年份(例如,2016)。
%y 簡寫年份,"00-99"的格式(例如,16)。
% 轉義字符(例如可轉義'%'本身)。
*t 返回有如下域的"table"
year 年份
month 月份
day 日
hour 小時
min 分鍾
sec 秒
wday 數字格式的星期,"1"是周日,之后以此類推
yday 數字格式的年份,"1"是一月,之后以此類推
isdst 是否使用夏令時
無 默認使用"%c"
"time"是一個距離某個特定時間的秒數。由於不同機器所使用的特定的時間不同,
所以最好使用"os.time()"的返回值作為此參數的值。默認使用"os.time()"的返回值。]]
print(os.date()) --> Sun Mar 6 23:33:31 2016
print(os.date("%A")) --> Sunday
print(os.date("%c", 0)) --> Thu Jan 1 08:00:00 1970
for k, v in pairs(os.date("*t")) do print(k, v) end
--[[ result:
hour 23
isdst false
year 2016
sec 8
wday 1
min 15
yday 66
day 6
month 3]]

print(os.date("Today is %A, in %B.")) --> today is Sunday, in March.

--[[ os.clock()
返回程序所使用的CPU時間的近似值(以秒為單位)。]]

-- 典型的應用是計算程序耗時。
local x = os.clock()
local s = 0
for i = 1, 100000 do s = s + i end
print(string.format("elapsed time: %.2f", os.clock() - x))
--> elapsed time: 0.01
for i = 1, 100000000 do s = s + i end -- 增加循環的次數,使用的時間增長。
print(string.format("elapsed time: %.2f", os.clock() - x))
--> elapsed time: 2.38

--[[ os.difftime(t2, t1)
返回以秒為單位的"t2"與"t1"之間的時間差,返回值依舊是以秒為單位。]]

t1 = os.time()
t2 = os.time()
print(t1, t2) --> 1457363213 1457363219
print(os.difftime(t2, t1)) --> 6.0

Q:與系統操作相關的庫方法?

A:

--[[ os.execute([command])
與C語言中的"execute()"功能相同,將"command"命令傳遞給shell執行。
如果執行成功,第一個參數返回"true",否則返回"nil"
第二個和第三個參數分別返回一個字符串和一個數字,
如果第二個參數返回"exit",代表命令正常退出,第三個參數代表退出狀態;
如果第二個參數返回"signal",代表命令被信號終端,第三個參數代表中斷的信號。
當不提供"command"命令時,如果shell可用,則返回"true",否則返回"false"
只有此時返回一個參數。]]
print(os.execute()) --> true
print(os.execute("mkdir"))
--[[ result:
mkdir: 缺少操作數
Try 'mkdir --help' for more information.
nil exit 1]]
print(os.execute("mkdir dir")) --> true exit 0

--[[ os.exit([code [, close]])
調用C語言中的"exit()"終止程序的運行。
如果"code""true",則返回"EXIT_SUCCESS";如果為"false",則返回"EXIT_FAILURE"
如果為一個數值,則返回該數值。默認為"true"
如果"close""true",則在終止之前關閉"Lua state"。]]

--[[ os.getenv(varname)
獲取系統環境變量"varname"的值,如果該變量不存在,則返回"nil"。]]
print(os.getenv("HOME")) --> /home/vermilliontear
print(os.getenv("MYVAR")) --> nil
> export MYVAR=9" -- 在shell中執行。
print(os.getenv("
MYVAR")) --> 9

附加:

1、實際上%x%X以及%c的最終顯示格式依賴於操作系統。例如在某些系統上%x以”MM/DD/YY”的形式顯示,而在另一些系統上是以”YY/MM/DD”的形式顯示。
如果想明確的使用某種格式,最好指定明確的”format”,例如%m/%d/%Y


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com