系統IO之檔案讀寫

2021-10-11 02:29:24 字數 1410 閱讀 5490

ssize_t write(int fd, const void *buf, size_t count);

功能:寫入資料

fd:檔案描述符,open函式的返回值

buf:待寫入的記憶體首位址

count:要寫入的位元組數

返回值:

成功 寫入的位元組數

失敗 返回-1

ssize_t read(int fd, void *buf, size_t count);

功能:讀取資料

fd:檔案描述符,open函式的返回值

buf:儲存讀取到資料的記憶體首位址

count: buf的大小

返回值:

成功 讀取到的位元組數

失敗 -1

int close(int fd);

功能:關閉檔案描述符

返回值:成功返回0,失敗返回-1。

是乙個非負整數,代表乙個開啟的檔案,每個開啟的檔案核心中就會有乙個結構體(相當於標準c中的file),該結構中記錄著檔案相關的詳細資訊,為了核心的安全,核心中的所有資料都不能暴露,因此只能給應用層返回乙個整數,該整數對應著核心中的檔案結構體,也叫控制代碼。

有預設開啟的三個檔案描述符:

0 標準輸入 stdin_fileno stdin

1 標準輸出 stdout_fileno stdout

2 標準錯誤 stderr_fileno stderr

int fileno(file *stream);

功能:獲取檔案結構中描述符

file *fdopen(int fd, const char *mode);

功能:把檔案描述符轉換成檔案結構指標

當使用系統呼叫時,需要從使用者態切換到核心態,當系統呼叫執行完成後再從核心態切換到使用者態,如果頻繁切換會浪費很多時間。

而標準io使用的緩衝區機制,資料並不會立即寫入檔案,而是先暫存到緩衝區中,當緩衝區滿時再一次寫入檔案中,從面大大降低了使用者態與核心態的切換次數,因此節約了大量時間,所以標準io要比直接使用系統io快。

如果系統io也使用緩衝區機制它的速度將比標準io更快。

int fseek(file *stream, long offset, int whence);

功能:設定檔案位置指標 標準io

返回值:成功返回0,失敗返回-1。

long ftell(file *stream);

功能:獲取檔案位置指標

off_t lseek(int fd, off_t offset, int whence);

功能:設定檔案位置指標 系統io

返回值:調整後的檔案位置指標

seek_set: 檔案開頭

seek_cur: 當前位置

seek_end: 檔案結尾

使用系統io實現乙個計算檔案大小的命令。

實習帶覆蓋檢測的cp命令。

IO檔案讀寫

b表示二進位制模式訪問,但是對於linux或者unix系統來說這個模式沒有任何意義,因為他們把所有檔案都看做二進位制檔案,包括文字檔案 一.三種方法讀取檔案 方法1 open f open d hello.txt r 已讀的方式開啟,open只能讀檔案,不能讀資料夾 fp f.read print ...

Swoole 非同步檔案系統IO 讀 寫

非同步io 讀 readfile 有大小限制最大4m read 支援超大檔案讀取 每次分段讀取 size的位元組 不會占用太多記憶體 result swoole async readfile dir 1.txt function filename,filecontent var dump resul...

檔案讀寫之I O緩衝與阻塞

緩衝i o和非緩衝i o 檔案讀寫主要牽涉到了如下五個操作 開啟 關閉 讀 寫 定位。在linux系統中,提供了兩套api,一套是c標準api fopen fclose fread fwrite fseek 另一套則是posix定義的系統api open close read write seek ...