linux系統IO操作

2021-10-14 23:41:42 字數 1595 閱讀 4849

|clib buff

|page cache

|disk cache

#include //開啟流

file *fopen(const char *pathname, const char *type);

//關閉流

int fclose(file *fp);

// 重新整理流

int fflush(file *fp);

// 一次讀寫乙個字元

int fgetc(file *fp);

int fputc(file *fp);

// 一次讀寫一行

char* fgets(char* buf, int n, file* fp);

int fputs(const char *str, file* fp);

// 二進位制讀寫

size_t fread(void *ptr, size_t size, size_t nobj, file *fp);

size_t fwrite(const void *ptr, size_t size, size_t nobj, file *fp);

// 格式化輸入輸出

int fprintf(file *fp, const char* format, ...);

int fscanf(file *fp, const char *format, ...);

// 示例

#include #include int main(void)

說明

檔案io是直接操作linux系統呼叫,大部分的問題都是使用檔案io帶來的。
api

int open(const char *pathname, int oflag);

int close(int filedes);

ssize_t read(int filedes, void* buff, size_t nbytes);

ssize_t write(int filedes, const void* buff, size_t nbytes);

int fsync(int filedes);

int fcntl(int filedes, int cmd);

int ioctl(int filedes, int request);

說明

size_t wirte_file()

上述api細節可參考《unix環境高階程式設計》第3章。
api

#include void *mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset);

匿名對映,傳入的fd為-1

後續整理下linux系統檔案io流程

linux系統中的IO操作

同步io分為阻塞io 非阻塞io 訊號驅動的io和多路轉接io。阻塞io 一直阻塞程序直到完成io操作。非阻塞io 有資料時進行io操作,沒有資料時立即返回不阻塞程序。訊號驅動io 當有資料到來是傳送訊號給程序執行io操作,提高cpu的利用率。當設定開啟檔案描述字o async標誌是可以用於訊號驅動...

Linux系統IO目錄檔案操作

linux目錄檔案 維護著乙個鍊錶的資料結構,目錄檔案的結構和單向鍊錶的節點的類似,可利用鍊錶的遍歷方法來實現目錄檔案遍歷.但是直接使用目錄流物件不會得到乙個鍊錶的節點 因為是流物件 需要配合readdir指令來移動流的當前位置指標,並獲得相應的鍊錶節點 目錄下的檔案的資訊 include incl...

系統io操作

乎每一種外設都是通過讀寫裝置上的暫存器來進行的,通常包括控制暫存器 狀態暫存器和資料暫存器三大類,外設的暫存器通常被連續地編址。根據cpu體系結構的不同,cpu對io埠的編址方式有兩種 典型地,如x86處理器為外設專門實現了乙個單獨的位址空間,稱為 i o位址空間 或者 i o埠空間 cpu通過專門...