Linux應用編程和網絡編程

Linux應用編程和網絡編程
第一部分  3.1 Linux中文件IO
3.1.1 應用編程框架介紹
3.1.1.1 什麼是應用編程
(1)整個嵌入式Linux核心課程包括5個點,按照學習順序依次是:
裸機、C高級、uboot和系統移植,linux應用編程和網絡編程、驅動。
(2)典型的嵌入式產品就是基於嵌入式Linux操作系統來工作的。典型的嵌入式產品的研發過程
就是:第一步讓linux系統在硬件上跑起來(系統移植工作),第二步基於Linux系統來開發應用程序
實現產品功能。
(3)基於Linux去做應用編程,其實就是通過調用Linux的系統API來實現應用需要完成的任務。

3.1.1.3 課程設計思路
學會如何使用Linux系統提供的API(和C庫函數)來實現一定的功能,通過學習對應用層的編程有
所掌握來配合後面驅動的學習。
如果希望深入學習Linux應用尤其是網絡編程知識,可以去看一些專門介紹這一塊的書。

3.1.1.4 什麼是文件IO
(1)IO就是input/output,輸入/輸出。文件IO的意思就是文件的讀寫。

3.1.2 文件操作的主要接口API
3.1.2.1 什麼是操作系統API
(1)API是一些函數,這些函數是由Linux系統提供支持的,由應用層程序來使用。
(2)應用層程序通過調用 API來調用操作系統中的各種功能,來幹活。
(3)學習一個操作系統,其實就是學習使用這個操作系統的API。
(4)今天我們要使用Linux系統來讀寫文件,手段就是學習Linux系統API中和文件IO
有關的幾個。
3.1.2.2 linux常用文件IO接口
(1)open、close、write、read、lseek函數

3.1.2.3 文件操作的一般步驟
(1)在Linux系統中要操作一個文件,一般是先open打開一個文件,得到一個文件描述符,
然後對文件進行讀寫操作(或其他操作),最後關閉(close)文件即可。
(2)強調一點:我們對文件進行操作時,一定要先打開文件,打開成功後才能去操作
(如果打開本身失敗,後面就不用操作了);最後讀寫完成之後一定要close關閉文件,
否則可能會造成文件損壞。
(3)文件平時是存在塊設備中(硬盤,NAND FLASH、SD卡)的文件系統中的,我們把這種文件
叫靜態文件。當我們去open打開一個文件時,Linux內核的操作包括:內核在進程中建立了一個打開
文件的數據結構,記錄下我們打開的這個文件;內核在內存中申請一段內存,並且將靜態文件的內容
從塊設備中讀取到內存中特定地址管理存放(叫動態文件)。
(4)打開文件後,以後對這個文件的讀寫操作,都是針對內存中這一份動態文件的,而不是針對
靜態文件的。當我們對動態文件進行讀寫後,此時內存中的動態文件和塊設備中的靜態文件就不同步了,
當我們close關閉動態文件時,close內部內核將內存中的動態文件的內容去更新(同步)塊設備中的
靜態文件。
(5)常見的一些現象:
第一個:打開一個文件時比較慢,內核讀塊設備需要一些時間
第二個:我們寫了 一半的文件,如果沒有點保存直接關機/斷電,
重啓後文件內容丟失。
(6)爲什麼要這麼設計?
爲什麼不直接在塊設備裏面操作?
因爲塊設備本身有讀寫限制(回憶NandFlash、SD等塊設備的讀寫特徵,爲什麼叫塊設備,因爲
只能按塊去讀,按塊去寫,這種操作顯然不靈活,例如你要改文件中的一個字,如果在塊設備裏面
操作,整個塊是一起操作的)。而內存可以按字節爲單位來操作,而且可以隨機操作(任意指定一個
地址,然後去操作這個地址,沒有順序限制,可以任意隨機去訪問,所以我們的內存叫RAM,很靈活。),
所以內核設計文件操作時就這麼設計了。

3.1.2.4 重要概念:文件描述符
(1)文件描述符其實實質是一個數字,這個數字在一個進程中表示一個特定的含義,
當我們open打開一個文件時,操作系統在內存中構建了一些數據結構來表示這個動態文件,
然後返回給應用程序一個數字作爲文件描述符,這個數字就和我們內存中維護這個動態文件的
這些數據結構掛鉤綁定上了,以後我們應用程序如果要操作這個動態文件,只需要用這個文件描述符
進行區分。
(2)一句話講清楚文件描述符:文件描述符就是用來區分一個程序打開的多個文件的。
(3)文件描述符的作用域:就是當前的進程,出了當前進程這個文件描述符就沒有意義了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章