本文來(lái)源電子發(fā)燒友社區(qū),作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2282703_1_1.html
Air105使用的是openluat,給我們提供了非常豐富的文件操作功能,今天我們就一次搞清楚基礎(chǔ)的文件操作方式。
一、文件系統(tǒng)
openluat上的文件系統(tǒng),分為如下幾種:
注意,luadb下的文件,是只讀的。
openluat中的文件操作對(duì)象,可以使用內(nèi)置的Flash,也可以使用SPI Flash,還可以使用SD卡,本文的演示,使用的是內(nèi)置的Flash。
二、文件操作方式
當(dāng)前支持的常用文件操作方式,則分為如下幾種:
三、io文件操作
io文件操作,是最基礎(chǔ)的文件操作方式。
io文件操作的基本指令如下:
1. 打開文件:如果打開失敗,則f為空
復(fù)制代碼
可供使用的標(biāo)志位如下:
通常使用中:
如果要打開文件讀取數(shù)據(jù),則標(biāo)志位使用r或者rb;
如果要打開文件寫入數(shù)據(jù),則標(biāo)志位使用w或者wb,注意會(huì)清空文件
如果要打開文件追加數(shù)據(jù),則標(biāo)志位使用a或者ab
2. 讀取數(shù)據(jù):
復(fù)制代碼
3. 寫入數(shù)據(jù):
復(fù)制代碼
注意寫入文件的時(shí)候,寫入的是字符串。而讀取的時(shí)候,再根據(jù)實(shí)際情況進(jìn)行解析。
4. 關(guān)閉文件:
復(fù)制代碼
文件操作部分的實(shí)例,可以查看Air105的demo中的fs/Air105/main.lua:
復(fù)制代碼
四、nvm操作
openluat的nvm操作,實(shí)際上是對(duì)io操作的一個(gè)特殊封裝。
通常于存儲(chǔ)配置,因?yàn)槠鋽?shù)據(jù)存儲(chǔ)必須是一個(gè)lua配置文件,樣例如下:
復(fù)制代碼
這樣的一個(gè)配置文件,是可以在lua腳本中,直接require的。
如果要讀取值,則使用nvm.get("a")
如果要設(shè)置值,則使用nvm.set('a',1)
需要注意的是,只能操作config.lua中存在的key,否則出錯(cuò)。存在的key,其對(duì)應(yīng)的value也不能為空,否則也會(huì)出錯(cuò)。
務(wù)必要提醒的是,因?yàn)槊看涡薷暮?,都?huì)整個(gè)配置數(shù)據(jù)一起保存,所以只適合較少配置數(shù)據(jù)的情況,不適合較多數(shù)據(jù)的設(shè)置讀取。數(shù)據(jù)較多的情況,可以直接使用io文件操作。
nvm的具體操作,可以查看Air105的demo中的nvm/main.lua:
復(fù)制代碼
需要注意的是,nvm.set(),默認(rèn)的配置文件config.lua的內(nèi)容,是不會(huì)發(fā)生變化的,需要用nvm.get()才能得到最新的值。
其具體處理的實(shí)際邏輯,可以查看nvm/nvm.lua了解;其中確保了即使斷電,也不會(huì)造成配置數(shù)據(jù)丟失的邏輯。
五、fdb數(shù)據(jù)操作
openluat的還提供了一個(gè)簡(jiǎn)單的kv操作庫(kù)fdb,可通過(guò)fdb.kv_ge和tfdb.kv_set來(lái)進(jìn)行讀寫。
如果熟悉memcached或者redis的同學(xué),對(duì)這個(gè)操作就會(huì)比較熟悉。
fdb存儲(chǔ)的數(shù)據(jù),刷機(jī)的時(shí)候,也不會(huì)丟失,除非主動(dòng)刪除對(duì)應(yīng)的key。
fdb的主要操作指令如下:
復(fù)制代碼
使用fdb.kv_set的時(shí)候,可以寫入不同類型的數(shù)據(jù),讀取的時(shí)候,也會(huì)保持類型。
需要注意的是,fdb存儲(chǔ)的數(shù)據(jù),也不能使用空值。但讀取不存在的key,則返回空值。
fdb基于flashdb實(shí)現(xiàn)的,具體實(shí)現(xiàn)邏輯,可以查看:https://gitee.com/openLuat/LuatOS/tree/master/components/flashdb/
fdb的具體操作,可以查看Air105的demo中的fdb/main.lua:
復(fù)制代碼
總的來(lái)說(shuō),通常的文件操作,使用io文件操作,配置類的數(shù)據(jù),使用nvm操作,而kv數(shù)據(jù)的存儲(chǔ),可以使用fdb。
例如:
如果需要存儲(chǔ)圖片等數(shù)據(jù),或者讀取文件內(nèi)容進(jìn)行分析之類的,可以用io文件操作。
如果是可以被用戶修改的配置,可以用nvm操作。
如果是一個(gè)類似sn之類的數(shù)據(jù),則可以考慮使用fdb。
Air105使用的是openluat,給我們提供了非常豐富的文件操作功能,今天我們就一次搞清楚基礎(chǔ)的文件操作方式。
一、文件系統(tǒng)
openluat上的文件系統(tǒng),分為如下幾種:
注意,luadb下的文件,是只讀的。
openluat中的文件操作對(duì)象,可以使用內(nèi)置的Flash,也可以使用SPI Flash,還可以使用SD卡,本文的演示,使用的是內(nèi)置的Flash。
二、文件操作方式
當(dāng)前支持的常用文件操作方式,則分為如下幾種:
- io:普通io方式操作文件
- nvm:ini方式操作的lua配置文件
- fdb:kv方式操作數(shù)據(jù),刷機(jī)也不會(huì)清除
三、io文件操作
io文件操作,是最基礎(chǔ)的文件操作方式。
io文件操作的基本指令如下:
1. 打開文件:如果打開失敗,則f為空
- local f = io.open("/文件名", "標(biāo)志位")
可供使用的標(biāo)志位如下:
通常使用中:
如果要打開文件讀取數(shù)據(jù),則標(biāo)志位使用r或者rb;
如果要打開文件寫入數(shù)據(jù),則標(biāo)志位使用w或者wb,注意會(huì)清空文件
如果要打開文件追加數(shù)據(jù),則標(biāo)志位使用a或者ab
2. 讀取數(shù)據(jù):
- -- 讀取首行
3. 寫入數(shù)據(jù):
- f:write(tostring(data))
注意寫入文件的時(shí)候,寫入的是字符串。而讀取的時(shí)候,再根據(jù)實(shí)際情況進(jìn)行解析。
4. 關(guān)閉文件:
- f:close()
文件操作部分的實(shí)例,可以查看Air105的demo中的fs/Air105/main.lua:
四、nvm操作
openluat的nvm操作,實(shí)際上是對(duì)io操作的一個(gè)特殊封裝。
通常于存儲(chǔ)配置,因?yàn)槠鋽?shù)據(jù)存儲(chǔ)必須是一個(gè)lua配置文件,樣例如下:
- --存儲(chǔ)默認(rèn)數(shù)據(jù)
- --必須return一個(gè)table
- return {
- a=1,
- b=2
- }
這樣的一個(gè)配置文件,是可以在lua腳本中,直接require的。
如果要讀取值,則使用nvm.get("a")
如果要設(shè)置值,則使用nvm.set('a',1)
需要注意的是,只能操作config.lua中存在的key,否則出錯(cuò)。存在的key,其對(duì)應(yīng)的value也不能為空,否則也會(huì)出錯(cuò)。
務(wù)必要提醒的是,因?yàn)槊看涡薷暮?,都?huì)整個(gè)配置數(shù)據(jù)一起保存,所以只適合較少配置數(shù)據(jù)的情況,不適合較多數(shù)據(jù)的設(shè)置讀取。數(shù)據(jù)較多的情況,可以直接使用io文件操作。
nvm的具體操作,可以查看Air105的demo中的nvm/main.lua:
-
-- LuaTools需要PROJECT和VERSION這兩個(gè)信息
需要注意的是,nvm.set(),默認(rèn)的配置文件config.lua的內(nèi)容,是不會(huì)發(fā)生變化的,需要用nvm.get()才能得到最新的值。
其具體處理的實(shí)際邏輯,可以查看nvm/nvm.lua了解;其中確保了即使斷電,也不會(huì)造成配置數(shù)據(jù)丟失的邏輯。
五、fdb數(shù)據(jù)操作
openluat的還提供了一個(gè)簡(jiǎn)單的kv操作庫(kù)fdb,可通過(guò)fdb.kv_ge和tfdb.kv_set來(lái)進(jìn)行讀寫。
如果熟悉memcached或者redis的同學(xué),對(duì)這個(gè)操作就會(huì)比較熟悉。
fdb存儲(chǔ)的數(shù)據(jù),刷機(jī)的時(shí)候,也不會(huì)丟失,除非主動(dòng)刪除對(duì)應(yīng)的key。
fdb的主要操作指令如下:
- -- 初始化
使用fdb.kv_set的時(shí)候,可以寫入不同類型的數(shù)據(jù),讀取的時(shí)候,也會(huì)保持類型。
需要注意的是,fdb存儲(chǔ)的數(shù)據(jù),也不能使用空值。但讀取不存在的key,則返回空值。
fdb基于flashdb實(shí)現(xiàn)的,具體實(shí)現(xiàn)邏輯,可以查看:https://gitee.com/openLuat/LuatOS/tree/master/components/flashdb/
fdb的具體操作,可以查看Air105的demo中的fdb/main.lua:
-
-- LuaTools需要PROJECT和VERSION這兩個(gè)信息
總的來(lái)說(shuō),通常的文件操作,使用io文件操作,配置類的數(shù)據(jù),使用nvm操作,而kv數(shù)據(jù)的存儲(chǔ),可以使用fdb。
例如:
如果需要存儲(chǔ)圖片等數(shù)據(jù),或者讀取文件內(nèi)容進(jìn)行分析之類的,可以用io文件操作。
如果是可以被用戶修改的配置,可以用nvm操作。
如果是一個(gè)類似sn之類的數(shù)據(jù),則可以考慮使用fdb。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
4771瀏覽量
96180 -
合宙通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
1658 -
Air105
+關(guān)注
關(guān)注
0文章
48瀏覽量
284
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
合宙Air780EP模塊——AT指令MQTT接入OneNET開發(fā)指南
過(guò)程,Air780EP和MQTT是最佳拍檔,讓設(shè)備互聯(lián)變得輕松又靠譜。想不想試試這簡(jiǎn)單又神奇的操作?那就來(lái)吧!本文詳細(xì)講解了基于合宙的Air
MQTT應(yīng)用看這篇!合宙Air780EP_LuatOS_MQTT應(yīng)用指南
Air780EP 是合宙的低功耗4G模組之一,支持LuatOS的腳本二次開發(fā),即使是不太懂技術(shù)的老板,也能輕松使用
合宙“花生米”4G模組——Air700EL Air700EY全新上市
“是花生米太大,還是Air700模組太???”深受工程師朋友喜愛的Air700系列迷你小封裝4G模組,也被稱為“合宙花生米”。今天,合
合宙 | Air780EP首版LuatOS固件發(fā)布,新品模組內(nèi)測(cè)搶先體驗(yàn)
11月27日,合宙推出 《9.9盲訂!合宙Air780EP新品4G開發(fā)板福利今日開啟》 鐵粉活動(dòng)
基于合宙Air001的迷你RGB燈環(huán)
問(wèn)題來(lái)了,你會(huì)親手做來(lái)送給最愛的TA嗎?基于合宙Air001的迷你RGB燈環(huán)-開源分享-本項(xiàng)目以合宙Ai
來(lái)了!基于合宙Air32的手持示波器
兼容主流F103,僅需 3.8元的 合宙Air32系列 超值國(guó)產(chǎn)MCU,性能強(qiáng)、開發(fā)快,不少行業(yè)客戶已廣泛應(yīng)用于量產(chǎn)項(xiàng)目,相比市場(chǎng)主流F103每盤可省數(shù)萬(wàn)元! 你知道嗎,工程師朋友們極
評(píng)論