所謂系統呼叫是指作業系統提供給使用者的一組「特殊」介面,使用者程式可以通過這組「特殊」介面來獲得作業系統核心提供的的服務
由於在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
#include
#include
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操作設定非阻塞方式。
以下三個常數中必須指定乙個,且僅允許指定乙個(這些常數定義在
Linux檔案程式設計
在linux下可以通過相應的檔案i o函式來完成對檔案的操作,這些函式通常被稱為不帶緩衝的i o,因為這些函式對檔案的讀寫都是呼叫linux核心的系統呼叫來實現的。基本的函式包括 open read write lseek 設定檔案指標 close等 呼叫格式 include include inc...
Linux檔案程式設計
linux中檔案程式設計可以使用兩種方法 1.linux系統呼叫 2.c語言庫函式。系統呼叫是基於linux系統的,它不能跨系統使用。c語言庫函式在各個系統都能使用。a.下面先介紹基於系統呼叫的檔案程式設計 1.檔案的建立.int creat const char filename,mode t m...
Linux檔案程式設計
一 linux系統呼叫及使用者程式設計介面 1 所謂系統呼叫是指作業系統提供給使用者的一組 特殊 介面,使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的的服務 2 linux一點哲學,一切皆為檔案 在linux中對目錄和裝置的操作都等同於對檔案的操作,都是使用檔案描述符來進行的。linux...