|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通過專門...