基礎IO相關操作

ruo_bing發表於2018-08-24

基礎IO

c語言檔案IO相關操作:

fopen           //開啟檔案,以只讀形式
fread           //從檔案裡讀取一行
flcose          //關閉檔案
fseek           //移動跳轉到當前讀寫位置
.
.
.       //等等

以上是c庫函式訪問檔案的呼叫介面,在linux下可以採用系統呼叫介面

c 庫中用於描述檔案的是檔案流指標,檔案流指標中還定義了一個緩衝區,我們所說的重新整理緩衝區是庫函式獨有的,這個緩衝區用於將短小資料組合成大資料一次,習慣性寫入檔案,提高效率
而系統呼叫寫沒有這個緩衝區。
在c庫中:

標準輸入————————–stdin
標準輸出 ———————-stdout
標準錯誤輸出 ——————stderr

在系統呼叫中:
標準輸入————————–stdin (0)
標準輸出 ———————-stdout (1)
標準錯誤輸出 ——————stderr(2)

庫函式與系統呼叫介面的關係:上下級呼叫關係:
這裡寫圖片描述

操作說明

系統呼叫介面如下:

int open (const char* path,int flags)
功能:開啟檔案;
引數:第一個是要開啟的檔案;
第二個是開啟檔案的方式

必選:
(O_RDONLY((只讀),O_WRONLY(只寫),O_RDWR(讀寫))

非必選:


O_CREAT        //若檔案存在開啟,不存在則建立
O_EXECL        //與O_CREAT同用時,若檔案存在則報錯
O_TRUNC       //若檔案存在則將檔案長度截為0
0_APPEND      //追加


返回值:失敗返回-1,成功返回檔案描述符
int open (const char* path,int flags, mode_t mode)
功能:建立檔案
引數:第一個引數是要建立的檔案和路徑;

第二個是建立方式:在必選項(O_RDONLY((只讀),O_WRONLY(只寫),O_RDWR(讀寫))後面加上O_CREAT或者O_EXECL;
O_WRONLY|O_CREAT

第三個引數是給檔案的許可權,例如0644
int read(int fd, char *buf,size_t len)

功能:從fd檔案中讀取len位元組的資料到從buf開始的空間去

引數:第一個是要讀的檔案(描述符);
第二個引數:讀到另外一個空間的地址;
第三個是:所讀資料的大小,以位元組為單位


返回值:成功返回實際讀取的位元組數
int write(int fd ,const char*buf,size_ t len)
功能:往fd所指檔案中寫入到從buf開始的緩衝區中len位元組的資料
返回:實際讀寫長度,出錯返回-1
int close(int fd)
功能:關閉檔案
引數:要關閉的檔案的檔案描述符
int lseek(int fd, off_ t offset,int  whence );
功能:用來改變讀寫一個檔案時讀寫指標的位置
引數:第一個是已經開啟的檔案的描述符
offset:讀寫位置的偏移量,由whence來決定
whence:分為三種:SEEK_SET偏移位置為檔案一開始,SEEK_CUR偏移位置為當前位置,SEEK_END偏移位置為檔案內容末尾)
返回值:新的相對於檔案開頭偏移量

舉例說明:
檔案fd內容為“abcdefg”,
 int  set = lseek(fd, 0, SEEK_END);
 write(fd, "hello", 6);
 就實現了從檔案原內容末尾寫入(SEK_SET偏移位置為檔案一開始,SEK_CUR偏移位置為當前位置,SEK_END偏移位置為檔案內容末尾)

對檔案操作的程式碼:
這裡寫圖片描述

相關文章