C語言--I/O檔案操作【下】
阿新 • • 發佈:2018-12-16
I/O檔案操作
這是C提供的另一種檔案操作,它是通過直接存/取檔案來完成對檔案的處理,而上篇所說流式檔案操作是通過緩衝區來進行;流式檔案操作是圍繞一個FILE指標來進行,而此類檔案操作是圍繞一個檔案的"控制代碼"來進行,什麼是控制代碼呢?它是一個整數,是系統用來標識一個檔案(在WINDOWS中,控制代碼的概念擴充套件到所有裝置資源的標識)的唯一的記號。此類檔案操作常用的函式如下表,這些函式及其所用的一些符號在io.h和fcntl.h中定義,在使用時要加入相應的標頭檔案。
函式 | 說明 |
---|---|
open() | 開啟一個檔案並返回它的控制代碼 |
close() | 關閉一個控制代碼 |
lseek() | 定位到檔案的指定位置 |
read() | 塊讀檔案 |
write() | 塊寫檔案 |
eof() | 測試檔案是否結束 |
filelength() | 取得檔案長度 |
rename() | |
chsize() | 改變檔案長度 |
open()
- 功能 開啟一個檔案並返回它的控制代碼
- 原型
int open(const char *path, int access [, unsigned mode]); path是要開啟的檔名, access是開啟的模式, mode是可選項: 表示檔案的屬性,主要用於UNIX系統中,在DOS/WINDOWS這個引數沒有意義。其中檔案的開啟模式如下表。
符號 | 含義 |
---|---|
O_RDONLY | 只讀方式 |
O_WRONLY | 只寫方式 |
O_RDWR | 讀/寫方式 |
O_NDELAY | 用於UNIX系統 |
O_APPEND | 追加方式 |
O_CREAT | 如果檔案不存在就建立 |
O_TRUNC | 把檔案長度截為0 |
O_EXCL 和O_CREAT連用 | 如果檔案存在返回錯誤 |
O_BINARY | 二進位制方式 |
O_TEXT | 文字方式 |
對於多個要求,可以用"|"運算子來連線,如O_APPEND|O_TEXT表示以文字模式和追加方式開啟檔案。
例:int handle=open("c://msdos.sys",O_BINARY|O_CREAT| O_WRITE)
詳細: https://baike.baidu.com/item/open/13009226?fr=aladdin
- 返回值 失敗:將返回一個小於0的值 成功:返回0;
close()
- 功能 關閉一個控制代碼,即關閉開啟的 TextStream 檔案。
- 原型 int close(int handle)
- 返回值 失敗:將返回一個小於0的值; 成功:返回0;
lseek()
- 標頭檔案 #include <sys/types.h> #include <unistd.h>
- 功能 定位到指定的位置
- 原型
long lseek(int handle, long offset, int fromwhere); offset是移動的量, fromwhere是移動的基準位置,取值和前面講的fseek()一樣, SEEK_SET:檔案首部; SEEK_CUR:檔案當前位置; SEEK_END:檔案尾。
- 返回值 此函式返回執行後文件新的存取位置。
例:
lseek(handle,-1234L,SEEK_CUR);//把存取位置從當前位置向前移動1234個位元組。
x=lseek(hand1e,0L,SEEK_END);//把存取位置移動到檔案尾,x=檔案尾的位置即檔案長度
read()
- 功能 從檔案讀取一塊資料
- 原型
int read(int handle, void *buf, unsigned len);
buf儲存讀出的資料,
len是讀取的位元組。
- 返回值 函式返回實際讀出的位元組。
例:char x[200];
read(hnd1,x,200);
write()
- 功能 寫一塊資料到檔案中,
- 原型
int write(int handle, void *buf, unsigned len);
buf儲存寫入的資料,
len是寫入的位元組。
- 返回值 返回實際寫入的位元組。
例:char x[]="I Love You";
write(handle,x,strlen(x));
eof()
- 功能 類似feof(),測試檔案是否結束
- 返回值 是返回1,否則返回0;
- 原型 int eof(int handle);
例:while(!eof(handle1))
{……};
filelength()
- 功能 返回檔案長度
- 原型 long filelength(int handle); 相當於lseek(handle,0L,SEEK_END)
例:long x=filelength(handle);
rename()
- 功能 重新命名檔案
- 原型
int rename(const char *oldname, const char *newname);
oldname是舊檔名,
newname是新檔名。
- 返回值 成功:返回0。 失敗:返回小於0值。
例:rename(“c://config.sys”,“c://config.w40”);
chsize();
- 功能 改變檔案長度
- 原型
int chsize(int handle, long size); size表示檔案新的長度,
- 返回值 成功返回0, 否則返回-1,如果指定的長度小於檔案長度,則檔案被截短;如果指定的長度大於檔案長度,則在檔案後面補’/0’。
例:chsize(handle,0x12345);