檔案的系統呼叫

2021-07-26 14:16:46 字數 4070 閱讀 2096

系統呼叫的效率底:

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 系統呼叫中出現了錯誤,對應的錯誤碼儲存在全域性變數 ...