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