IO操作 檔案IO

2021-10-21 10:41:23 字數 3189 閱讀 7453

一、系統呼叫

系統呼叫實際上是作業系統(核心)提供的供使用者使用的介面函式。
二、標準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 返回值成功 返回檔案描述符 失敗 ...