linux應用基礎知識點1 檔案IO

2021-10-05 03:13:53 字數 1487 閱讀 4488

read函式

write函式

exit _exit _exit函式

errno和perror

檔案平時存在塊裝置中的檔案系統中,也就是靜態檔案。當open它時,系統在程序中建立乙個資料結構,用來記錄下該檔案。然後申請一段記憶體,將檔案內容讀取到該記憶體中,也就是動態檔案。

所以open之後的讀寫都是對動態檔案的讀寫,而不是真正的靜態檔案本身。

當close時,核心將修改後的動態檔案同步到靜態檔案中。

這麼設計的原因是:核心對塊裝置的操作非常不靈活(扇區讀寫),而記憶體則可以按位元組操作。

當open時,作業系統在記憶體中建立乙個資料結構用來表示該動態檔案,然後返回乙個數字作為檔案描述符,該檔案描述符與所述資料結構繫結。所以以後要操作該動態檔案,只需要用這個檔案描述符標識即可。

注意:檔案描述符的作用域只限於當前程序,出了該程序則沒有意義。

int open

(const char *pathname, int flags)

;

int open

(const char *pathname, int flags, mode_t mode)

;

當使用o_creat建立檔案時,可以使用mode指定該檔案的許可權,如0666即指定屬主/組/其他人的許可權都為「可讀可寫不可執行」。如:

fd = open(「a.txt」, o_rdwr|o_crerat|o_excl, 0666);

if(fd < 0)

open之阻塞 非阻塞

開啟檔案預設是阻塞式的,即如果開啟條件不具備,程序會卡住直到可以開啟。如果想以非阻塞方式開啟可以使用o_nonblock標誌。(阻塞概念用於裝置檔案,而不用於普通檔案)

open之o_sync

使用該標誌open可以讓系統直接同步該檔案到塊裝置中,而不是先寫到底層緩衝區然後等機會再寫。

ssize_t read

(int fd,

void

*buf, size_t count)

;

count是要讀取的數量,返回是實際讀取的數量。有時候,當以阻塞方式讀取裝置時,可能會因為讀取的數量沒達到count而阻塞住。

ssize_t write

(int fd,

const

void

*buf, size_t count)

;

exit是標準庫函式,後兩個是系統函式(api函式),效果一樣。

errno是os維護的乙個全域性變數,任何函式都可以通過設定errno乙個錯誤編號,來告訴上層呼叫者。perror函式可以讀取errno的錯誤編號,並轉成字串,然後列印出來。如:

if()//如果出錯了

總結自朱有鵬《linux應用程式設計與網路》

文章只是為了梳理知識,不能做到事無鉅細。

知識點15 檔案的高階應用

1,creat函式 int creat const char path,int amode 該函式在標頭檔案 中。如果函式執行失敗,返回 1 但僅憑返回值,不能檢測出錯的原因 其中,引數path是所建立檔名稱的字串,引數amode用來指定訪問的模式和標明該檔案為二進位制檔案還是文字檔案。一般情況下,...

linux基礎知識點

1.在vmware安裝linux系統和快照功能使用。注意 2.系統目錄介紹 1 表示根目錄 2 表示 root 3 etc 存放系統配置目錄 4 home 除了root以為所有使用者預設在home下新建乙個以使用者名為資料夾名稱的資料夾。5 usr 所有使用者安裝的軟體都放入這個資料夾中。知識點擴充...

leetcode 基礎知識點1

1 返回陣列,但是沒有返回陣列的數目 returnsize,或者 returncolsize 2 返回字串,沒有結束的標誌位,直接返回傳入引數的指標,返回自建的malloc陣列的字串 3 陣列長度設定和malloc陣列的長度溢位 尤其注意二維陣列的分配時的長度 4 傳入引數為int matrix,可...