系統呼叫的效率底:
1.系統呼叫會影響系統的效能
與函式呼叫相比,在執行系統呼叫時,linux必須從執行使用者**切換到執行核心**,
然後在返回使用者**。所以盡可能的減少系統呼叫的次數。
2.硬體一次讀寫的資料塊是規定的
會導致留下過多的空隙導致空間浪費系統呼叫與檔案描述符:
1.系統呼叫一般通過檔案描述符操作,檔案描述符用來標記乙個開啟的檔案或裝置
2.乙個程式執行時,它一般會有三個已經開啟的檔案描述符
0:標準輸入
1:標準輸出
2:標準錯誤系統呼叫函式:
#include
size_t write (int fildes, const void *buf, size_t nbytes);
把buf中前nbytes位元組的資料寫入與檔案描述符fildes相關聯的檔案中
成功:返回實際寫入的位元組數
失敗:返回-1錯誤**儲存在全域性變數errno中
size_t read (int fildes, const void *buf, size_t nbytes);
與write相同
#include
#include //在遵循posix規範的系統上
#include //不需要包含這兩個檔案
int open (const char *path, int oflags);
int open (const char *path, int oflags, mode_t mode);
成功:返回乙個檔案描述符(非負整數)
失敗:返回-1錯誤**儲存在全域性變數errno中
path:檔案路徑
oflags: a | b
a:o_rdonly
o_wronly
o_rdwr
o_trune: 清楚原有的檔案內容o_creat: 如果需要按mode中給出訪問模式建立檔案
o_excl: 與o_creat一起使用
mode: 與umask的反值的and操作才是最後的許可權結果
s_irusr: 讀許可權,檔案屬主
s_iwusr:
s_ixusr:
****grp:
****oth:
int creat (const char *path, mode_t mode);
相當於oflags為 o_creat| | o_wronly | o_trunc 來呼叫open
#include
int close (int fildes);
返回0或-1
int ioctl (int fildes, int cmd, ...);
它是乙個用於控制裝置及其描述符行為和配置底層服務的!介面
#include
#include
off_t lseek (int fildes, off_t offset, int whence);
設定fildes的讀寫指標設定
#include
#include
#include
int fstat(ing fileds, struct stat *buf);
int stat(const char *path, struct stat *buf);
int lstat(const char *path, struct stat *buf);
fstat系統呼叫返回與開啟的檔案描述符相關的檔案的狀態資訊,
該資訊將會寫到乙個buf結構中,buf的位址以引數形式傳遞給fstat
#include
int dup(int fildes);
複製檔案描述符,返回乙個新的描述符
int dup2(int fildes, int fildes2); ????
把乙個檔案描述符複製為另外乙個 ????linux系統中各種檔案函式與使用者、裝置驅動程式、核心和硬體之間的關係:
系統呼叫的方式訪問檔案
1 建立檔案 int create const char filename mode t mode 建立檔案。filename為檔案路徑,mode為檔案許可權,如 s irusr 可讀 s irwxu 可讀 可寫 可執行。也可以用數字表示,如 0755。2 檔案描述 在linux中,所有開啟的檔案都...
與檔案相關的系統呼叫
一 低階檔案i o 1 系統呼叫 open read write lseek close fcntl ioctl 2 檔案描述 當開啟乙個現存盤案或建立乙個新檔案時,核心向程序返回乙個檔案描述符。當讀 寫乙個檔案時,用open或creat返回的檔案描述符標識該檔案,將其作為引數傳送給read wri...
系統呼叫之檔案訪問
1 write 系統呼叫 系統呼叫write 的作用是,把緩衝區 buf的前 nbytes 位元組寫入到與檔案描述符 fildes 關聯的檔案中,同時它會返回實際寫入的位元組數。如果返回 0,就表示為寫出任何資料 如果是 1,就表示在 write 系統呼叫中出現了錯誤,對應的錯誤碼儲存在全域性變數 ...