一、系統呼叫
系統呼叫實際上是作業系統(核心)提供的供使用者使用的介面函式。
二、標準io函式和檔案io函式的關係
標準io是c庫內定義的函式,是凌駕於系統之上的,適用於任何的作業系統;檔案io是由linux系統提供的,
只能在linux系統中使用,而不可以在其它作業系統中使用。標準io函式可以呼叫檔案io函式。
三、檔案描述符
檔案描述符是linux核心用來標識乙個開啟的檔案的符號,是乙個非負整數;檔案流指標是記憶體用來標識
乙個開啟的檔案的符號。
file*檔案流指標
檔案描述符
檔案描述符符號常量
標準輸入
stdin
0stdin_fileno
標準輸出
stdout
1stdout_fileno
標準出錯
strerr
2stderr_fileno
四、檔案io函式
1、open函式
函式原型:int open(const char* filename, int flags);
int open(const char* filename, int flags, int mode);
函式功能:以flag指定的方式開啟檔案filename,獲得對應檔案的檔案描述符,該描述符有返回值帶回。
引數:filename 目標檔案,是乙個字串常量,可以包含檔案的路徑
flags 開啟檔案的訪問許可權。
o_rdonly 唯讀的方式
o_wronly 只寫的方式
o_rdwr 讀寫的方式
o_creat 建立(檔案不存在時進行建立)
以上的訪問許可權還可以使用「|」進行連線,例如:
o_wronly | o_creat 以只寫的方式開啟檔案,檔案不存在則建立
o_rdwr | o_creat 以讀寫的方式開啟檔案,檔案不存在則建立
mode 對「新建」的檔案指定許可權,只有當檔案不存在而且第二個引數中有o_creat時,該引數才會
使用。實際建立的許可權應該與檔案許可權掩碼umask進行運算得到實際的檔案許可權,運算規則
如下:實際檔案許可權 = 給與的許可權&(~umask);
返回值:檔案開啟成功,返回當前未使用的最小的檔案描述符;失敗則返回-1,並設定errno。
使用者許可權:
讀許可權 4
寫許可權 2
執行許可權 1
2、close函式
函式原型:int close(int fd);
函式功能:關閉檔案描述符fd相對性的檔案。
3、read函式
函式原型:size_t read(int fd, void *buf, size_t count);
引數:fd 檔案描述符
buf 存放讀取到的資料的緩衝區首位址
count 「期望」讀取的位元組數
返回值:> 0 表示成功讀到的位元組數
=0 表示讀取到了檔案的尾部
-1 讀取失敗,返回-1,並設定errno
1、read函式說明:
(1)讀取某個檔案的方式
while(ret > 0)
分析:當讀取到檔案的尾部時ret = 0;當讀取檔案失敗ret == -1;因此讀取某個檔案的條件是ret > 0
(2)read讀取檔案至少迴圈兩次:
首先,把檔案中的所有資料全部讀取完畢,返回讀取到的位元組數;其次,從檔案尾部開始讀取,讀到了檔案
末尾,返回0。
4、write函式
函式原型:size_t write(int fd, const void *buf, size_t count);
引數:fd 檔案描述符
buf 資料存放的緩衝區
count 「期望」向檔案中寫入的位元組數目,一般count = strlen(buf),有效寫入。
返回值:成功,返回實際寫入到檔案中的位元組數;失敗,返回-1,並設定errno。
例:通過檔案io實現檔案的拷貝工作。
5、lseek函式
函式原型:off_t lseek(int fd, off_t offset, int whence);
函式功能:開啟fd指定的檔案時,設定當前檔案的讀寫位置。
引數:fd 檔案描述符
offset 相對於基準的相對偏移大小
whence 相對偏移量的起點。
seek_set 以檔案開頭為相對偏移量的起點
seek_cur 以當前檔案的讀寫位置為相對偏移量的起點
seek_end 以檔案的結尾為相對偏移量的起點
返回值:成功設定,則返回檔案的當前讀寫位置(即檔案當前讀寫位置相對於檔案開頭的偏移量);設定失敗
則放回-1。
獲取檔案的長度:
int length = lseek(fd, 0, seek_end);
五、標準io和檔案io的區別
2、標準io具有緩衝機制,而檔案io沒有緩衝機制。
3、標準io通過流指標來進行檔案的操作;而檔案io通過檔案描述符來進行檔案的操作。
六、標準io和檔案io的使用場合不同
標準io主要用於編寫應用層程式,適用於linux上層應用開發;檔案io主要用於進行linux底層開發,用於編寫
核心和驅動程式。
IO 五 操作檔案AccessFileDemo
public class accessfiledemo 讀取 public static void read throws exception 追加 public static void readwithwrite throws exception 實現向指定位置 插入資料 param filena...
Linux檔案操作 檔案I O 記憶體對映
提出記憶體對映i o概念的根本原因是為了解決讀寫檔案的效率問題。如果乙個程式需要大量的磁碟io時,記憶體對映io往往能夠使程式執行的速度有很大地提高,記憶體對映i o也可以算作是一種空間換時間的機制。linux使用mmap函式建立乙個磁碟檔案到記憶體的對映,函式原型為 include void mm...
檔案IO操作
在對乙個檔案或者裝置進行讀寫之前,都需要先開啟,以獲得該檔案或者裝置的操作指標,也就是檔案描述符。有了檔案描述符,後續就可以進行讀取,修改操作了。標頭檔案函式宣告 int open const char pathname,int flags,mode t mode 返回值成功 返回檔案描述符 失敗 ...