一、系統調用方式訪問文件
1、創建文件:int creat(const char *filename,mode_t mode)
filename爲要創建的文件名(包含路徑,默認爲當前路徑);
mode爲創建的文件屬性,0無任何權限,1可執行,2可寫,4可讀,6可讀可寫;
要創建一個用戶可讀、可寫、可執行,但是組沒有權限,其他人可以讀、可以執行的文件,並設置用戶ID位。那麼,我們應該使用的模式是1(設置用戶ID)、0(不設置組ID)、7(1+2+4,讀、寫、執行)、0(沒有權限)、5(1+4,讀、執行)即10705:
2、打開文件:
int open(const char *pathname,int flags)
int open(const char *pathname,int flags,mode_t mode)
open函數有兩個表示形式。pathname爲要打開的文件名(包含路徑,缺省爲當前路徑);
flags爲打開文件的標誌;
O_RDONLY以只讀方式打開,O_WRONLY以只寫的當時打開,O_RDWR以讀寫方式打開,O_APPEND以追加的方式打開
O_CREAT創建一個文件,O_EXEC如果使用O_CREAT而已經存在一個文件,會發生錯誤;
如果使用O_CREAT標誌,則要使用第二個open函數,同時要指定mode屬性;表示如果open打開的pathname不存在,則創建一個文件爲mode屬性的文件,mode指定文件的權限;
3、關閉:int close(int fd)
fd爲文件描述符,文件描述符本身就是一個非負整數,在0---OPEN_MAX之中,OPEN_MAX表示一個線程同時能打開的最大文件數,現在一般的OPEN_MAX值爲:1024
在open函數中,成功打開一個文件的函數返回值就是這個文件的描述符,close函數可通過這個描述符來關閉文件;
4、讀寫文件:
int read(int fd,const void *buf,size_t length)
int write(int fd,const void *buf,size_t length)
buf爲緩衝區,length爲讀寫的字節大小;表示在fd指定的文件中讀取length個字節大小的長度,保存在buf的緩衝區中;
函數的返回值爲讀寫的實際字節大小。
5、文件定位:int lseek(int fd,offset_t offset,int whence)
lseek()將文件讀寫指針相對於whence移動offen個字節,返回值爲指針相對於文件頭的位置;
whence的屬性有:SEEK_SET相對於文件頭,SEEK_CUR相對於讀寫指針當前位置,SEEK_END相對於文件末
6、訪問判斷:int access(const char *pathname,int mode)
二、庫函數訪問文件
1、創建和打開:FILE *fopen(const char *pathname,const char *mode)
r以只讀方式打開,w以只寫方式打開,如果文件不存在,則創建文件,否則文件被截斷,a以追加的方式打開,如果文件不存在,則創建文件,r+以讀寫方式打開,w+以讀寫方式打開,如果文件不存在,則創建文件,否則文件被截斷,a+以讀和追加的方式打開,如果不存在,則創建新文件;
2、讀寫
size_t fread(void *ptr,size_t size,size_t n, FILE *stream)
從stream中讀n個段爲size字節,並放在ptr所指的數組中,返回值是實際讀取的字節數;
size_t fwrite(const void *ptr,size_t size,size_t n,FILE *stream)
3、讀寫字符:
int fgetc(FILE *stream)
int fputc(int c,FILE *stream)
fscanf(FILE *stream,char *format[,argument....])格式化輸入
int fprintf(FILE *stream,char *format[,argument....])
4、文件定位:int fseek(FILE *stream,long offset,int whence)
whence的屬性有:SEEK_SET相對於文件頭,SEEK_CUR相對於讀寫指針當前位置,SEEK_END相對於文件末
5、獲取當前路徑:char *getcwd(char *buffer,size_t size)
提供size大小的buffer,把當前路徑保存到buffer中;
6、創建目錄:int mkdir(char *dir,int mode)
返回值:0表示成功,1表示失敗;