在對檔案進行讀寫操作前,需要先開啟該檔案。核心為每個程序維護了乙個開啟檔案的列表,該錶被稱為檔案表。該錶由一些叫做檔案描述符的非負整數進行索引。列表中的每項均包含乙個開啟檔案的資訊,其中包括乙個指向檔案備份inode記憶體拷貝的指標和元資料(例如檔案位置和訪問模式等)。使用者空間和核心空間都把檔案描述符作為每個程序的唯一cookies。開啟乙個檔案返回乙個檔案描述符,而接下來的操作則把檔案描述符作為基本引數。
每個程序按照慣例會至少有三個開啟的檔案描述符:0,1和2,除非程序顯式地關閉它們。檔案描述符0是標準輸入,檔案描述符1是標準輸出,而檔案描述符2是標準錯誤。
檔案描述符不僅僅用於普通檔案的訪問,也用於訪問裝置檔案、管道、目錄以及快速使用者空間鎖、fifos和套接字。遵循一切皆檔案的理念,任何你能讀寫的東西都可以用檔案描述符來訪問。
開啟檔案
#include#include#includeint open(const char *path,int flag);
int open(const char *path,int flag,mode_t mode);
path:檔名的字串位址
flag:檔案開啟模式資訊
mode:當檔案建立時,mode引數提供新建檔案的許可權
返回值:成功時返回檔案描述符,失敗時返回-1
建立檔案
#include#include#includeint creat(const char *name,mode_t mode);
mode:當檔案建立時,mode引數提供新建檔案的許可權
關閉檔案
使用檔案後必須關閉
#includeint close(int fd);
fd:需要關閉的檔案或套接字的檔案描述符
返回值:成功時返回0,失敗時返回-1
檔案偏移量lseek
每個開啟檔案都有乙個與其相關聯的「當前檔案偏移量」。它通常是乙個非負整數,用以度量從檔案開始處計算的位元組數。通常,讀寫檔案都從當前檔案偏移量處開始,並使偏移量增加所讀寫的位元組數。
#includeoff_t lseek(int fd,off_t offset,int whence)
fd:檔案描述符
對引數offset的解釋與引數whence的值有關。
返回值:若成功,返回新的檔案偏移量;若出錯,返回為-1
將資料寫入檔案
write函式用於向檔案輸出資料
#includessize_t write(int fd,const void *buf,size_t nbytes);
返回值:成功時返回寫入的位元組數,失敗時返回-1
#include
#include
#include
#include
void error_handling(char *message);
int main(void)
void error_handling(char *message)
讀取檔案中的資料
read函式與write函式相對應,用來讀取輸入資料
#includessize_t read(int fd,void *buf,size_t nbytes);
fd:顯示資料接收物件的檔案描述符
buf:要儲存接收資料的緩衝位址值
nbytes:要接收資料的最大位元組數
#include
#include
#include
#include
#define buf_size 100
void error_handling(char *message);
int main(void)
void error_handling(char *message)
基於linux的檔案操作
1.檔案的建立 touch filename 2.目錄的建立 建立乙個單獨的目錄 mkdir directory 建立巢狀目錄 mkdir p dir1 dir2 dir3 p 表示建立遞迴目錄,當上級目錄不存在時候自動建立 3.檔案的刪除 rm filename rm f filename f f...
Linux下基於檔案描述符的檔案操作
int open const char pathname,int flags 檔名,開啟方式 int open const char pathname,int flags,mode t mode 檔名,開啟方式 許可權 int create 不常用 int close int fd open出錯時返...
基於WINAPI的檔案操作
基於winapi的檔案操作 winapi提供了兩種檔案操作函式,一組是為了和16位程式相容,這種函式比較簡單 而另一種是專門為32位程式設計,在使用時就顯得麻煩些,下面我就把這兩組函式一一介紹 一 和16位程式相容的一組函式函式 說明對應bcb庫函式 lopen 開啟檔案 fileopen lclo...