Linux程式設計基礎 檔案I O

2021-10-24 08:14:10 字數 2967 閱讀 3091

unix/linux為作業系統把服務和裝置都抽象成了檔案,並提供了一套簡單而統一的介面,這部分介面就是檔案讀寫。也就是說unix/linux系統中的任何物件都可以被當作某種特殊的檔案,以檔案的形式訪問。

檔案分類

目錄檔案、裝置檔案、socket檔案、管道檔案、普通檔案、鏈結檔案
檔案相關的系統呼叫

#include

#include

#include

int open(const char *pathname, int flags);

功能:開啟檔案

pathname:檔案的路徑

flags:開啟檔案的方式

o_rdonly 唯讀

o_wronly 只寫

o_rdwr 讀寫

o_creat 檔案不存在則建立

o_excl 如果檔案存在則建立失敗

o_trunc 如果檔案存在則清空

o_ndelay 非阻塞,開啟檔案後的操作以非阻塞模式進行。

o_sync 同步,寫入資料後等待資料被寫入到底層硬體後才返回。

o_async 非同步,當檔案可讀/寫時向呼叫的程序傳送訊號sigio。

返回值:檔案描述符,類似於標準庫的file*,代表乙個開啟的檔案。

int open(const char *pathname, int flags, mode_t mode);

功能:建立檔案

flags:o_create

mode:

s_irwxu 00700 擁有者 讀寫執行許可權

s_irusr 00400 擁有者 讀

s_iwusr 00200 擁有者 寫

s_ixusr 00100 擁有者 執行

s_irwxg 00070 同組 讀寫執行許可權

s_irgrp 00040 同組 讀

s_iwgrp 00020 同組 寫

s_ixgrp 00010 同組 執行

s_irwxo 00007 其它 讀寫執行許可權

s_iroth 00004 其它 讀

s_iwoth 00002 其它 寫

s_ixoth 00001 其它 執行

int creat(const char *pathname, mode_t mode);

功能:建立檔案

mode:同open

#include

ssize_t write(int fd, const void *buf, size_t count);

功能:把記憶體中的資料寫入檔案中

fd:檔案描述符,也就是open的返回值。

count:要寫入的位元組數

返回值:成功寫入的位元組數

ssize_t read(int fd, void *buf, size_t count);

功能:從檔案中讀取資料到記憶體

fd:檔案描述術,也就是open的返回值。

count:想讀取的位元組數

返回值:實際讀取到的位元組數

int close(int fd);

功能:關閉檔案

返回值:成功返回0,失敗返回-1。

使用標準io比直接使用系統io更快,原因標準io有緩衝區,在寫資料時並不是直接呼叫系統io,而先把緩衝區填滿,然後再呼叫系統io定入資料到檔案。

而直接使用系統io會返回切換使用者態和記憶體態,更加耗時,當我們給系統io也增加個更大的緩衝區時,它的速度會比標準io更快。

標準io > 系統io

系統io+緩衝區 > 標準io

標準io

int fseek(file *stream, long offset, int whence);

返回值:成功返回0,失敗返回-1。

系統io

off_t lseek(int fd, off_t offset, int whence);

fd:檔案描述術,也就是open的返回值。

offset:偏移值

whence:基礎位置

seek_set 檔案開頭

seek_cur 當前位置

seek_end 檔案末尾

返回值:調整後的檔案位置指標所在的位置。

在越過檔案末尾的位置寫入資料將形成空洞,空洞會計算在檔案大小中,但不占用磁碟空間。

物件 sprintf 轉換成 字串 然後再定入檔案

按字串形式讀取,使用sscanf 轉換成對應再使用。

檔案描述符:

1、非負整數,代表開啟的檔案。

2、由系統呼叫返回(open)返回,可以被核心空間引用。

3、它代表著乙個核心物件(就相當於file對像),因為記憶體不能暴露它的記憶體位址,

因此不能返回乙個物件指標。

4、核心中有一張表記錄所有開啟的檔案物件,檔案描述符就是訪問這張表的下標,

因此檔案描述也叫控制代碼,訪問物件指標的憑證。

核心中有三個預設開啟的檔案描述符:

0 標準輸入 stdin

1 標準輸出 stdout

2 標準錯誤 stderr

檔案描述符的複製:

int dup(int oldfd);

功能:複製乙個已經開啟的檔案描述符

返回值:返回乙個當前沒有用過的最小的檔案描述符

int dup2(int oldfd, int newfd);

功能:複製乙個指定的檔案描述符

newfd:想要複製的檔案描述符,如果已經被開啟,則先關閉再複製。

注意:複製成功後,相當於兩相檔案描述符對就乙個開啟的檔案。

linux 檔案I O 程式設計

1.基本操作 include include include open fd open tmp hello.c o wronly o creat,0600 close close fd read read fd,buf,len write write fd,buf,len lseek off t l...

linux程式設計之檔案I O

linux下c語言對於檔案的操作,我們會經常用到fopen fclose fwrite fread fgets 等一系列庫函式,基本和是和windows下學習c語言一樣的,其實這些庫函式就是在linuxx下對系統呼叫函式的封裝,因此這裡只介紹系統函式下的檔案操作函式。一 open 開啟檔案 incl...

Linux學習 檔案I O程式設計

在linux中,為了保護核心空間,將程式的執行空間分為核心空間和使用者空間,核心態和使用者態 他們執行在不同的級別上,在邏輯上是相互隔離的,因此使用者程序在通常情況下不允許訪問核心資料,也無法使用核心函式,他們只能在使用者空間操作使用者資料,呼叫使用者空間的函式,作業系統為使用者提供了兩個介面 1....