Linux檔案程式設計

mf1crystal發表於2017-12-04

所謂系統呼叫是指作業系統提供給使用者的一組“特殊”介面,使用者程式可以通過這組“特殊”介面來獲得作業系統核心提供的的服務

由於在Linux中,為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間(也就是常稱的核心態和使用者態),它們分別執行在不同的級別上,在邏輯上是相互隔離的。

因此,使用者程式在通常情況下不允許訪問核心資料,也無法使用核心函式,它們只能在使用者空間操作使用者資料,呼叫使用者空間的函式。

系統呼叫並不是直接與程式設計師進行互動的,它僅僅是一個通過軟中斷機制向核心提交請求,以獲取核心服務的介面。在實際使用中程式設計師呼叫的通常是使用者程式設計介面—API

系統命令相對API更高了一層,它實際上一個可執行程式,它的內部引用了使用者程式設計介面(API)來實現相應的功能
Linux一點哲學,“一切皆為檔案”;在Linux中對目錄和裝置的操作都等同於對檔案的操作,都是使用檔案描述符來進行的。
Linux檔案可分為:普通檔案,目錄檔案,連結檔案,裝置檔案;

開啟一個現存檔案或建立一個新檔案時,核心就向程式返回一個檔案描述符;當需要讀寫檔案時,也需要把檔案描述符作為引數傳遞給相應的函式。

檔案描述符是一個非負的整數,它是一個索引值,並指向在核心中每個程式開啟檔案的記錄表。

一個程式啟動時,都會開啟3個檔案:標準輸入、標準輸出和標準出錯處理
int creat(const char *filename, mode_t mode )
filename :建立的檔名
(包含路徑,預設為當前路徑)
mode:建立模式
常建立模式:
S_IRUSR 可讀
S_IWUSR 可寫
S_IXUSR 可執行
S_IXRWU 可讀、可寫、可執行
除用以上巨集來選擇建立模式,也可以用數字來表示
open函式是用於開啟或建立檔案,在開啟或建立檔案時可以指定檔案的屬性及使用者的許可權等各種引數。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
引數:
pathname是要開啟或建立的檔案的名字
flags引數可用來說明此函式的多個選擇項
mode對於open函式而言,僅當建立新檔案時才使用第三個引數

返回值:成功返回新分配的檔案描述符,
出錯返回-1並設定errn
以下可選項可以同時指定0個或多個, 和必選項按位或起來作為flags引數。
O_CREAT 若此檔案不存在則建立它。使用此選擇項時,需同時說明第三個引數mode,用其說明該新檔案的存取許可權。
O_NONBLOCK 如果pathname指的是一個塊特殊檔案或一個字元特殊檔案,則此選擇項為此檔案的本次開啟操作和後續的I / O操作設定非阻塞方式。

以下三個常數中必須指定一個,且僅允許指定一個(這些常數定義在

相關文章