第二十二課 作業系統庫

2021-07-26 04:55:30 字數 3100 閱讀 6385

作業系統庫定義在table os中,其中包含了檔案操作函式、獲取當前日期和時間 的函式,以及其他一些與作業系統相關的功能。lua只使用了 ansi標準中定義的函式,而像目錄操作和套接字這類作業系統功能並不是ansi標準的一部分,因此作業系統庫也就不包含它們了。

posix庫為lua提供了posix.1標準的功能

luasocket庫提供了網路支援

對於檔案操作而言,庫只提供了兩個函式,乙個是檔案改名os.rename,乙個是刪除檔案os.remove。

日期和時間

time和date提供了所有的日期和時間功能

不帶任何引數呼叫time,它會以數字形式返回當前的日期和時間。

用乙個table作為引數呼叫它,會返回乙個數字,表示該table中所描述的日期和時間,table的有效字段:

year 乙個完整的年份

month 01-12

day 01-31

hour 00-23

min 00-59

sec 00-59

isdst 乙個布林值,true表示夏令時

前三個欄位是必須要有的,其他字段預設為中午(12:00:00)。

print(os.time) -->1

函式date是time 的乙個反函式,它可以將乙個表示日期和時間的數字轉換成某些高階的表現形式。其第乙個引數是格式化字串,指定了期望的表示形式;第二個引數是日期和時間的數字,預設為當前日期和時間。

為了生成乙個日期table,可以使用格式字串「*t」。

function printdate (d)

local f = function(d) if d.isdst then return "true" else return "false" end end

print(string.format("year=%d, month=%d, day=%d, yday=%d, wday=%d, hour=%d, min=%d, sec=%d, isdst=%s", d.year, d.month, d.day, d.yday, d.wday, d.hour, d.min, d.sec, f(d)))

endd = os.date("*t", 906000490)

printdate(d) -->year=1998, month=9, day=17, yday=260, wday=5, hour=10, min=48, sec=10, isdst=false

wday表示星期數(1表示星期天)

yday表示1年中的第幾天(1是一月一日)

而對於其他格式字串,os.date會將日期格式化為乙個字串,這個字串是傳入格式字串的乙個複製,但其中某些特殊標記被替換成了時間和日期資訊。所有的標記都以「%」開頭,並伴隨乙個字母,例如:

print(os.date("today is %a, in %b")) -->today is tuesday, in january

print(os.date("%x", 906000490)) -->09/17/98

所有的表現形式取決於當前的區域設定。

下表列出了所有的標記以及其含義,這些 標記說明中使用的示範時間為2023年9月16日(星期三)23:48:10。對於數字值,表中也列出了它們的有效範圍:

%a 一星期中天數的簡寫(例如:wed)

%a 一星期中天數的全稱(例如: wednesday)

%b 月份的簡寫(例如:sep)

%b 月份的全稱(例如:september)

%c 日期和時間(例如:09/16/98 23:48:10)

%d 乙個月中的第幾天(16)[01~31]

%h 24小時制中的小時數(23)[00~23]

%i 12小時制中的小時數(11)[00~12]

%j 一年中的第幾天(259)[001~366]

%m 分鐘數(48)[00~59]

%m 月份數(09)[01~12]

%p 「上午(am)」或「下午(pm)」(pm)

%s 秒數(10)[00~59]

%w 一星期中的第幾天(3)[0~6=星期天~星期六]

%x 日期(例如:09/16/98)

%x 時間(例如:23:48:10)

%y 兩位數的年份(98)[00~99]

%y 完整的年份(1998)

%% 字元"%"

如果不帶任何引數呼叫os.date函式,它會使用格式%c,即以一種合理的格式表示完整的日期和時間資訊。另外,%x、%x和%c會根據不同的 區域和系統而發生變化。如果需要一種固定的表示形式,例如mm/dd/yyyy,可以使用顯式的格式字串「%m/%d/%y」。

local x = os.clock()

local s = 0

for i = 1, 100000000 do s = s + i end

print(string.format("elapsed time: %.2f\n", os.clock() - x)) -->1.02

其他系統呼叫

os.exit 中止當前程式的執行

os.getenv 獲取乙個環境變數的值,並接受乙個變數名,返回對應的字串的值 print(os.getenv("home")) -->/home/lua 若乙個環境變數未定義,則返回nil。

os.execute 可執行一條系統命令,它等價於c語言中的system函式。它需要接收乙個命令字串,並返回乙個錯誤 **。例如:

function createdir (dirname)

os.execute("mkdir" .. dirname)

endos.setlocale 設定當前lua程式所使用的區域。區域定義了不同檔案或不同語言間的差異之處。setlocale函式有兩個字串引數區域名和分類名,分類引數指定了區域引數中 哪組特徵將起作用。區域中有6中分類:

collate 控制 字串的字母順序

ctype 控制單個字元的型別以及其大小寫間的轉換

monetary 不影響lua程式

numeric 控制如何 格式化數字

time 控制如何格式化日期和時間

all 控制上述所有的功能,預設的分類是「all」

setlocale函式會返回區域名,如果失敗則返回nil。

print(os.setlocale("iso-8859-1", "collate"))

第二十二課 運算放大電路

1.運放性質 a輸入電阻無窮大,b輸出電阻為零,c增益無窮大 使用運放構造 減法器,積分電路,微分電路,數模轉換電路,放大器,濾波器 2.減法電路 電壓源v1通過分壓電路接在正端r1,r2,電壓源v2通過電阻r1接到負端,並接負反饋電阻r2 分析方法1 v 差不多等於 v 法 或稱 虛地法 原因 只...

第二十二題

第二十二題 韓信點兵 在中國數學史上,廣泛流傳著乙個 韓信點兵 的故事 韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點名的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數 按從1到5報數,記下最末乙個士兵報的數為1 按從1...

第二十二天

區域性變數和全域性變數 在乙個函式內部定義的變數是內部變數,他只有在本函式範圍內才有效,在此函式之外是不能使用這些變數的,這稱為區域性變數。復合語句的的變數是可以用 全域性變數也叫外部變數 全域性變數從 定義從 開始用 變數的儲存類別 從空間上講剛剛的就是作用域 從空間 還可以從變數值存在的時間 生...