幾個檔案操作函式

2021-08-18 01:15:41 字數 3551 閱讀 6236

1. open()函式

功能描述:用於開啟或建立檔案,在開啟或建立檔案時可以指定檔案的屬性及使用者的許可權等各種引數。

所需標頭檔案:#include,#include,#include

函式原型:int open(const char *pathname,intflags,int perms)

引數:pathname:被開啟的檔名(可包括路徑名如"dev/ttys0")

flags:檔案開啟方式,

o_rdonly:以唯讀方式開啟檔案

o_wronly:以只寫方式開啟檔案

o_rdwr:以讀寫方式開啟檔案

o_creat:如果改檔案不存在,就建立乙個新的檔案,並用第三個引數為其設定許可權

o_excl:如果使用o_creat時檔案存在,則返回錯誤訊息。這一引數可測試檔案是否存在。此時open是原子操作,防止多個程序同時建立同乙個檔案

o_nonblock:如果pathname指的是乙個fifo、乙個塊特殊檔案或乙個字元特殊檔案,則此選擇項為此檔案的本次開啟操作和後續的i/o操作設定非阻塞方式。

o_sync:使每次write都等到物理i/o操作完成。

o_rsync:read 等待所有寫入同一區域的寫操作完成後再進行

在open()函式中,falgs引數可以通過「|」組合構成,但前3個標準常量(o_rdonly,o_wronly,和o_rdwr)不能互相組合。

perms:被開啟檔案的訪問許可權,可以用兩種方法表示,可以用一組巨集定義:s_i(r/w/x)(usr/grp/oth),其中r/w/x表示讀寫執行許可權,

usr/grp/oth分別表示檔案的所有者/檔案所屬組/其他使用者,如s_iruur|s_iwuur|s_ixuur,(-rex------),也可用八進位制800表示同樣的許可權

返回值:

成功:返回檔案描述符

失敗:返回-1

2. close()函式

功能描述:用於關閉乙個被開啟的的檔案

所需標頭檔案: #include

函式原型:int close(int fd)

引數:fd檔案描述符

函式返回值:0成功,-1出錯

3. read()函式

功能描述: 從檔案讀取資料。

所需標頭檔案: #include

函式原型:ssize_t read(int fd,void *buf, size_t count);

引數:  

fd: 將要讀取資料的檔案描述詞。

buf:指緩衝區,即讀取的資料會被放到這個緩衝區中去。

count: 表示呼叫一次read操作,應該讀多少數量的字元。

返回值:返回所讀取的位元組數;0(讀到eof);-1(出錯)。

以下幾種情況會導致讀取到的位元組數小於 count :

a. 讀取普通檔案時,讀到檔案末尾還不夠 count 位元組。例如:如果檔案只有 30位元組,而我們想讀取 100

位元組,那麼實際讀到的只有 30 位元組,read 函式返回 30 。此時再使用 read 函式作用於這個檔案會導致 read 返回 0。

b.從終端裝置(terminal device)讀取時,一般情況下每次只能讀取一行。

c.從網路讀取時,網路快取可能導致讀取的位元組數小於 count位元組。

d. 讀取 pipe 或者fifo 時,pipe 或 fifo 裡的位元組數可能小於 count 。

e.從面向記錄(record-oriented)的裝置讀取時,某些面向記錄的裝置(如磁帶)每次最多只能返回乙個記錄。

f.在讀取了部分資料時被訊號中斷。

讀操作始於 cfo 。在成功返回之前,cfo 增加,增量為實際讀取到的位元組數。

4. write()函式

功能描述: 向檔案寫入資料。

所需標頭檔案: #include

函式原型:ssize_t write(int fd, void *buf,size_t count);

返回值:寫入檔案的位元組數(成功);-1(出錯)

功能:write 函式向 filedes 中寫入 count位元組資料,資料**為 buf 。返回值一般總是等於count,否則就是出錯了。常見的出錯原因是磁碟空間滿了或者超過了檔案大小限制。

功能描述: 用於在指定的檔案描述符中將將檔案指標定位到相應位置。

所需標頭檔案: #include,#include

函式原型:off_t lseek

(int fd, off_t offset,int whence);

引數:fd;檔案描述符

offset:偏移量,每乙個讀寫操作所需要移動的距離,單位是位元組,可正可負(向前移,向後移)

whence:

seek_set:當前位置為檔案的開頭,新位置為偏移量的大小

seek_cur:當前位置為指標的位置,新位置為當前位置加上偏移量

seek_end:當前位置為檔案的結尾,新位置為檔案大小加上偏移量的大小

返回值:

成功:返回當前位移

失敗:返回-1

6.函式例項

#include

#define buffer_size128 

//每次讀寫快取大小,影響執行效率

#define src_file_name"src_file.txt" 

//源檔名

#define dest_file_name"dest_file.txt" 

//目標檔名

#define offset0 

//檔案指標偏移量

int main()

//向原始檔中寫資料

write(src_file,str,sizeof(str));

//建立目的檔案

dest_file=open(dest_file_name,o_rdwr|o_creat,s_irusr|s_iwusr|s_irgrp|s_iroth); 

if(dest_file<0)

lseek(src_file,offset,seek_set);//將原始檔的讀寫指標移到起始位置

while((real_read_len=read(src_file,src_buff,sizeof(src_buff)))>0)

lseek(dest_file,offset,seek_set);//將目的檔案的讀寫指標移到起始位置

while((real_read_len=read(dest_file,dest_buff,sizeof(dest_buff)))>0);//讀取目的檔案的內容

printf("dest_file:%s",dest_buff);

close(src_file);

close(dest_file);

return 0;

}結果 如下:

src_file:this is a test about

open()

close()

write()

read()

lseek()

end of the file

dest_file:this is a test about

open()

close()

write()

read()

lseek()

end of the file

有關檔案操作的幾個函式

1.creat 1 函式的作用 建立,建立新檔案。2 函式的原型 int creat const char pathname,mode t mode 3 函式的引數 pathname 要建立的檔案路徑字串。如 home hello.c mode 建立檔案的許可權。4 函式的返回值 成功返回檔案描述符...

檔案操作的幾個基本函式

檔案操作中的函式要注意是對檔案進行操作,而不是對輸出螢幕進行操作 在對檔案進行操作前,要先開啟函式 fopen 1,對檔案進行寫入時有以下函式 fputc fputs fwrite fprintf 2,對檔案進行讀取時有以下函式 fgetc fgets fread fscanf 3,對檔案操作完成後...

常用的幾個檔案操作函式

include includeint main include int main include int main void printf s n buf 在輸出時需要新增換行符 return 0 include int main void while c fgetc fp eof fclose f...