Linux下文件編程

一、系統調用方式訪問文件

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表示失敗;

發佈了36 篇原創文章 · 獲贊 20 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章