fseek linux 大文件_一文搞懂Linux系统开发
文章目錄
Linux系統(tǒng)開(kāi)發(fā)會(huì)用到什么?
C語(yǔ)言基礎(chǔ)
shell腳本
慢慢學(xué)會(huì)使用Makefile
常規(guī)Linux系統(tǒng)編程知識(shí)都有什么?哪些常用?哪些不常用?
常規(guī)Linux編程知識(shí)
文件IO
文件與目錄操作
標(biāo)準(zhǔn)IO庫(kù)
進(jìn)程控制
線(xiàn)程編程
高級(jí)IO
進(jìn)程間通信
數(shù)據(jù)庫(kù)
串口編程
網(wǎng)絡(luò)編程
結(jié)束語(yǔ)
Linux系統(tǒng)開(kāi)發(fā)會(huì)用到什么?
C語(yǔ)言基礎(chǔ)
Linux系統(tǒng)內(nèi)核是C語(yǔ)言編寫(xiě)的,所以,Linux系統(tǒng)開(kāi)發(fā)可能會(huì)和很多系統(tǒng)API打交道,需要掌握C語(yǔ)言基礎(chǔ),C語(yǔ)言是Linux最基礎(chǔ)的開(kāi)發(fā)語(yǔ)言,當(dāng)然也可以用C++。一般做與系統(tǒng)交互的模塊時(shí),用C語(yǔ)言多一些,做上層業(yè)務(wù)應(yīng)用時(shí),為了開(kāi)發(fā)效率,會(huì)使用C++來(lái)開(kāi)發(fā),畢竟C++是面向?qū)ο蟮拈_(kāi)發(fā)語(yǔ)言,適合大型項(xiàng)目的開(kāi)發(fā),方便模塊化,代碼復(fù)用率高。
shell腳本
shell腳本,也就是使用Linux系統(tǒng)下的一系列命令,有機(jī)組合在一起,而完成預(yù)期的功能。Linux設(shè)計(jì)思想是“小即是美”,這一思想是shell腳本編程的完美體現(xiàn)。每個(gè)命令只完成一種功能,不同的命令組合在一起,卻可以實(shí)現(xiàn)復(fù)雜的功能。做Linux下開(kāi)發(fā),免不了要與腳本打交道(比如測(cè)試、分析數(shù)據(jù)等)。
慢慢學(xué)會(huì)使用Makefile
Makefile是Linux程序開(kāi)發(fā)時(shí)必不可少的編譯管理腳本,這個(gè)里面東西也很多,不過(guò)剛開(kāi)始可以簡(jiǎn)單看看,夠用就行,隨著項(xiàng)目的越做越大,代碼文件與目錄越來(lái)越復(fù)雜,這時(shí)候的Makefile可能就會(huì)復(fù)雜一些,牽扯到不同目錄的Makefile的相互調(diào)用或者協(xié)調(diào)。
比如嵌入式系統(tǒng)中,一般不止一個(gè)應(yīng)用程序,可能會(huì)有多個(gè)程序,在整體編譯時(shí),會(huì)包括如下內(nèi)容:
各個(gè)應(yīng)用程序模塊的編譯(需要判斷是否編譯成功,出現(xiàn)編譯失敗的情況停下來(lái),拋出錯(cuò)誤信息)
應(yīng)用程序打包(做成壓縮包或者分區(qū)鏡像)
默認(rèn)配置文件打包
uboot、內(nèi)核、文件系統(tǒng)、應(yīng)用程序整體打包成一個(gè)鏡像文件,大小對(duì)應(yīng)flash分區(qū)的大小(大小不足需要填充空數(shù)據(jù),保證與分區(qū)對(duì)應(yīng))。
自動(dòng)版本管理,在編譯完成,打包完成后,可以通過(guò)腳本來(lái)自動(dòng)根據(jù)時(shí)間生成版本號(hào)。
這些東西做起來(lái)其實(shí)挺復(fù)雜的,需要Makefile與shell腳本搭配完成。
常規(guī)Linux系統(tǒng)編程知識(shí)都有什么?哪些常用?哪些不常用?
常規(guī)Linux編程知識(shí)
文件IO
比較常用
Linux系統(tǒng)下,所有的資源都是以文件的形式訪(fǎng)問(wèn)的,設(shè)備被抽象為設(shè)備文件,放于/dev目錄下。
基本的訪(fǎng)問(wèn)函數(shù):
函數(shù)名簡(jiǎn)介一般怎么用
open打開(kāi)設(shè)備文件訪(fǎng)問(wèn)設(shè)備文件,首先要先打開(kāi)設(shè)備
close關(guān)閉設(shè)備文件文件訪(fǎng)問(wèn)結(jié)束后,需要調(diào)用該接口,如果不關(guān)閉,會(huì)造fb耗盡
read讀取數(shù)據(jù)讀取數(shù)據(jù),可以是文本文件內(nèi)容,也可以是攝像頭數(shù)據(jù)等
write寫(xiě)入數(shù)據(jù)向設(shè)備寫(xiě)數(shù)據(jù),比如串口通信時(shí),可以用write發(fā)送數(shù)據(jù)
ioctlIO操作函數(shù)該函數(shù)功能比較多,被稱(chēng)作雜物箱~,可以讀、寫(xiě)數(shù)據(jù),做驅(qū)動(dòng)的同學(xué)應(yīng)該很了解
fcntl屬性設(shè)置函數(shù)對(duì)已經(jīng)打開(kāi)的設(shè)備,設(shè)置屬性,比如可以設(shè)置串口讀數(shù)據(jù)的阻塞和非阻塞屬性
lseek改變偏移量一般用于對(duì)已打開(kāi)的文件讀寫(xiě)位置的偏移量修改
文件與目錄操作
常用
系統(tǒng)編程少不了文件與目錄的訪(fǎng)問(wèn),比如你要讀取某個(gè)目錄下的所有文件名字,或者修改文件名、修改目錄,移動(dòng)文件等等。
函數(shù)名簡(jiǎn)介一般怎么用
stat、 fstat 、lstat獲取文件狀態(tài)可以獲取到文件的創(chuàng)建、訪(fǎng)問(wèn)時(shí)間,文件大小等
access檢測(cè)文件屬性常用于判斷文件是否存在
chmod修改文件權(quán)限一般涉及到文件訪(fǎng)問(wèn)權(quán)限修改時(shí),會(huì)用到,比如增加可執(zhí)行權(quán)限
mkdir創(chuàng)建目錄一般在程序里判斷到需要用到的目錄不存在時(shí),用此函數(shù)創(chuàng)建
rmdir刪除目錄需要?jiǎng)h除目錄時(shí)使用,一般很少用到
opendir打開(kāi)目錄在讀取目錄信息之前,需要先打開(kāi)目錄(類(lèi)中與文件訪(fǎng)問(wèn))
readdir讀取目錄內(nèi)容在檢索文件時(shí),會(huì)用到,讀取目錄下文件列表
closedir關(guān)閉目錄在讀取完成后,記得關(guān)閉目錄
sync同步數(shù)據(jù)到磁盤(pán)這個(gè)函數(shù)一般在修改文件,寫(xiě)入數(shù)據(jù)后調(diào)用,讓系統(tǒng)把數(shù)據(jù)同步到磁盤(pán)
標(biāo)準(zhǔn)IO庫(kù)
比較常用
所謂標(biāo)準(zhǔn)IO庫(kù),其實(shí)是C語(yǔ)言里的文件IO,另外這里面的IO與前面提到的“文件IO”在文件的讀寫(xiě)上有個(gè)區(qū)別,標(biāo)準(zhǔn)IO是有緩存的,而Linux系統(tǒng)的文件IO函數(shù)是無(wú)緩存的。
主要是文件操作函數(shù):
函數(shù)名簡(jiǎn)介一般怎么用
fopen打開(kāi)文件放文件文件前先調(diào)用fopen獲取文件句柄
fclose關(guān)閉文件文件訪(fǎng)問(wèn)結(jié)束后,記得關(guān)閉文件,否則造成內(nèi)存泄露
fread讀取文件讀取文件數(shù)據(jù)
fseek修改文件讀寫(xiě)位置用于修改文件讀寫(xiě)的位置偏移量
進(jìn)程控制
一般
如果你不使用多進(jìn)程編程的話(huà),這一項(xiàng)可能就用的不多,我的代碼里用的也不是太多。
這個(gè)知識(shí)點(diǎn)主要是進(jìn)程的創(chuàng)建、子進(jìn)程管理、進(jìn)程退出資源釋放等等。
線(xiàn)程編程
比較常用
上了系統(tǒng),一般跑的任務(wù)就會(huì)比較多,線(xiàn)程是比較常用的,一般可以分為兩種,一種是長(zhǎng)時(shí)間運(yùn)行的任務(wù),一種是執(zhí)行完任務(wù)自行退出。現(xiàn)在C++11已經(jīng)支持了線(xiàn)程,使用起來(lái)非常方便。之前沒(méi)有C++11時(shí),為了方便使用,都是對(duì)pthrea_簇函數(shù)進(jìn)行了二次封裝。
高級(jí)IO
常用
可能你會(huì)比較奇怪,為什么這么多“IO”相關(guān)的東西:文件IO、標(biāo)準(zhǔn)文件IO、高級(jí)IO!
是的,這里的IO比較多,前兩個(gè)“IO”還有點(diǎn)相似,這個(gè)高級(jí)IO和前面兩個(gè)有點(diǎn)不太一樣。
高級(jí)IO里主要是講的IO操作的方式:阻塞、非阻塞控制,最主要的是通過(guò)select和poll實(shí)現(xiàn)IO多路復(fù)用,這樣可以實(shí)現(xiàn)程序的異步執(zhí)行。現(xiàn)在用的比較多的Nginx,就是使用的epoll模型,實(shí)現(xiàn)的高并發(fā)。
進(jìn)程間通信
非常常用
一般在linux系統(tǒng)下面,既然是系統(tǒng),就不止一個(gè)應(yīng)用程序在運(yùn)行,那多個(gè)應(yīng)用程序,就會(huì)需要數(shù)據(jù)交互,那么,就用到了進(jìn)程間通信,進(jìn)程間通信有許多開(kāi)源的工具(比如DBUS),這里簡(jiǎn)單介紹一下系統(tǒng)里提供的通信方式:
名稱(chēng)簡(jiǎn)介
管道一般用于父子進(jìn)程間通信,有名管道可以跨程序
消息隊(duì)列消息隊(duì)列可以分類(lèi)型,適用于數(shù)據(jù)量小的,簡(jiǎn)單通信
信號(hào)量PV操作,用于同步,可以與共享內(nèi)存搭配用,寫(xiě)完數(shù)據(jù),告訴另一個(gè)線(xiàn)程可以讀取了
共享內(nèi)存適用于大數(shù)據(jù)量的傳輸
socketsocke不僅是網(wǎng)絡(luò)通信的接口,也可以是本地進(jìn)程間通信(UNIX socke),這種方式很常用
數(shù)據(jù)庫(kù)
常用
如果是存儲(chǔ)配置參數(shù),我不太推薦用數(shù)據(jù)庫(kù),用json就挺好。數(shù)據(jù)一般用于存儲(chǔ)比較規(guī)則的數(shù)據(jù),這樣方便數(shù)據(jù)的管理。在嵌入式系統(tǒng),用的比較多的是sqlite數(shù)據(jù)庫(kù)。
串口編程
比較常用
在Linux下,特別是做嵌入式系統(tǒng),這個(gè)可能是少不了的,比較常用。其實(shí)串口編程也很簡(jiǎn)單,可能200行代碼就可以把串口通信建立起來(lái)了。應(yīng)用層的數(shù)據(jù)通信,就是使用write、和read函數(shù)操作,但是如果想做的比較好一些,就需要花點(diǎn)時(shí)間去做個(gè)軟件框架,比如利用前面提到的select實(shí)現(xiàn)異步操作(后面文章會(huì)介紹實(shí)現(xiàn)方式以及串口的封裝)。
網(wǎng)絡(luò)編程
超級(jí)常用
相信現(xiàn)在的嵌入式設(shè)備基本上都需要網(wǎng)絡(luò)通信功能,所以,網(wǎng)絡(luò)編程自然是非常常用的。特備是現(xiàn)在物聯(lián)網(wǎng)的發(fā)展,萬(wàn)物互聯(lián)。Linux下的網(wǎng)絡(luò)編程,有一系列的API函數(shù),挺多的,參數(shù)配置也比較多,剛開(kāi)始會(huì)讓人很頭疼,不知道哪個(gè)參數(shù)設(shè)置個(gè)什么值合適(我們都是慢慢試錯(cuò)試出來(lái)的)。這個(gè)也不用擔(dān)心,我后面會(huì)給大家分享出來(lái)我用C++封裝好的網(wǎng)絡(luò)通信庫(kù),包括TCP、UPD、UDP組播、域套接字(本地)等的封裝。
結(jié)束語(yǔ)
————————————————
版權(quán)聲明:本文為CSDN博主「fensnote」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wuquan_1230/article/details/104808817
總結(jié)
以上是生活随笔為你收集整理的fseek linux 大文件_一文搞懂Linux系统开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信用卡花呗收款服务费什么意思
- 下一篇: 变频器输出功率_变频器的输出功率该如何选