C語言 檔案操作

2021-08-11 05:43:55 字數 3731 閱讀 8388

1.linux下的檔案

在linux作業系統中,它對一切資源的管理都是對檔案的操作。

在現代作業系統中, 要利用大量的程式和資料,由於記憶體容量有限,且不能長期儲存,於是,人們把這些資料以檔案的形式放在外存中,需要的時候再將它們調入記憶體,從此便有了檔案系統。

2.linux目錄結構

3.linux檔案分類

普通檔案 -

目錄檔案 d

裝置檔案

管道檔案 p

鏈結檔案 l

還有以下常見的

字元裝置 c

塊裝置 b

堆疊檔案 f

4.如何來訪問乙個檔案

通過系統呼叫來訪問檔案是最直接的方式。系統呼叫函式直接作用於作業系統核心的裝置驅動程式從而實現檔案訪問。

5.linux下檔案的操作有哪些?

和操作一般意義上的檔案一樣,linux中對檔案的操作只需要五個基本的函式:open、close、read、write和ioctl。通過呼叫這幾個函式就能對linux中的檔案進行讀、寫等操作。不過,這種操作又分為系統呼叫和庫函式呼叫。簡單的說,系統呼叫是最直接的方式,庫函式呼叫最終也是通過系統呼叫實現的。可認為庫函式呼叫是對系統調出於效率考慮而做出的優化。

6.其他和檔案管理有關的系統呼叫有那些

1)庫函式

為了提高檔案訪問操作的效率,並且使得檔案操作變得更方便,linux發行版提供了一系列的標準函式庫。他們是一些由函式構成的集合,你可以在自己的程式方便的中使用它們,去操作檔案。提供輸出緩衝功能的標準i/o庫就是這樣的例子。你可以高效的寫任意長度的資料塊,庫函式則在需要的時候安排底層函式呼叫(系統呼叫)

2)標準i/o庫

標準i/o庫及其標頭檔案為底層i/o系統呼叫提供了乙個通用的介面。這個庫現在已經成為ansi標準c的一部分,而前面所講的系統呼叫卻不是。標準i/o庫提供了許多複雜功能的函式,用於格式化輸出和掃瞄輸入,它還負責滿足裝置的緩衝需求。在許多方面,使用標準i/o庫和使用底層檔案描述符類似。需要先開啟乙個檔案,已建立乙個檔案訪問路徑(也就是系統呼叫中的檔案描述符)在標準i/o庫中,與檔案描述符對應的叫 (stream),它被實現為指向結構file的指標。在啟動程式時,有三個檔案流是自動開啟的。他們是:

stdin:標準輸入

stdout:標準輸出

stderr:標準錯誤輸出

7.常用的i/o庫函式有哪些?

1)fopen函式

fopen函式類似於系統呼叫中的open函式。和open一樣,它返回檔案的識別符號,只是這裡叫做流(stream),在庫函式裡實現為乙個指向檔案的指標。如果需要對裝置的行為進行明確的控制,最好使用底層系統呼叫,因為這可以避免使用庫函式帶來的一些非預期的***,如輸入/輸出緩衝。

函式原型:

#include

file *fopen(const

char *filename, const

char *mode);

2)fread/fwrite函式

fread函式從檔案流中讀取資料,對應於系統呼叫中的read;fwrite函式從檔案流中寫資料,對應於系統呼叫中的write

函式原型:

#include

size_t fread(void *ptr, size_t size, size_t nitems,file *stream);

引數說明:

*ptr要讀取資料的緩衝區,也就是要存放讀取資料的地方。

size:指定每個資料記錄的長度。

nitems: 計數,給出要傳輸的記錄個數。

返回值:成功讀取到資料緩衝區的記錄個數,當到達檔案尾時,他的返回值可能會消耗與nitems,甚至可以是0。

3)fclose函式

fclose函式關閉指定的檔案流stream,這個操作會使所有未寫出的資料都寫出。因為stdio庫函式會對資料進行緩衝,所有呼叫fclose函式是很重要的。如果程式需要確保資料已經全部寫出,就應該呼叫fclose函式。雖然程式正常結束時,也會自動的呼叫fclose函式,但這樣就不能檢測出呼叫fclose所產生的錯誤了。

函式原型如下:

#include

int fclose(file *stream);

4)fflush函式

fflush函式的作用是把檔案流中所有未寫出的資料全部寫出。 處於效率考慮,在使用庫函式的時候會使用資料緩衝區,當緩衝區滿的時候才進行寫操作。使用fflush函式可以將緩衝區的資料全部寫出,而不關心緩衝區是否滿。fclose的執行隱含呼叫了fflush函式,所以不必再fclose執行之前呼叫fflush。

函式原型:

#include

int fflush(file *stream);

8.write

write,就是把緩衝區的資料寫入檔案中。注意,這裡的檔案時廣泛意義的檔案,比如寫入磁碟、寫入印表機等等。

linux中write()的函式原型:

size_t write(int fildes, const

void *buf, size_t nbytes);

引數說明:

fildes:檔案描述符,標識了要寫入的目標檔案。例如:fildes的值為1,就像標準輸出寫資料,也就是在顯示屏上顯示資料;如果為2 ,則想標註錯誤寫資料。

*buf:待寫入的檔案,是乙個字串指標。

nbytes:要寫入的字元數。

函式返回值:size_t 返回成功寫入檔案的字元數。需要指出的是,write可能會報告說他寫入的位元組比你所要求的少。這並不一定是個錯誤。在程式中,你需要檢查error已發現錯誤,然後再次呼叫write寫入剩餘的資料。

9.read

系統呼叫read是從檔案中讀出資料。要讀取的檔案用檔案描述符標識,資料讀入乙個事先定義好的緩衝區。他返回實際讀入的位元組數。

linux中read的函式原型:

size_t read(int fildes, void *buf, size_t nbytes);
引數說明:

fildes:檔案描述符,標識要讀取的檔案。如果為0,則從標準輸入讀資料。類似於scanf()的功能。

*buf:緩衝區,用來儲存讀入的資料。

nbytes:要讀取的字元數。

返回值:size_t返回成功讀取的字元數,它可能會小於請求的位元組數。

10.open

系統呼叫open的作用是開啟乙個檔案,並返回這個檔案的描述符。簡單地說,open建立了一條到檔案或裝置的訪問路徑。如果操作成功,它將返回乙個檔案描述符,read和write等系統呼叫使用該檔案描述符對檔案或裝置進行操作。這個檔案描述符是唯一的,他不會和任何其他執行中的程序共享。如果兩個程式同時開啟乙個檔案,會得到兩個不同的問價描述符。如果同時對兩個檔案進行操作,他們各自操作,互補影響,彼此相互覆蓋(後寫入的覆蓋先寫入的)為了防止檔案按讀寫衝突,可以使用檔案鎖的功能。這不是本次重點,以後介紹。

linux中open的函式原型有兩個:

int open(const

char *path, int oflags);

int open(const

char *path, int oflags, mode_t mode );

引數說明。

path:準備開啟的檔案或裝置名字。

oflags:指出要開啟檔案的訪問模式。

c語言檔案操作

rt null ch fgetc fp while ch eof fclose fp 本 例程式的功能是從檔案中逐個讀取字元,在螢幕上顯示。程式定義了檔案指標fp,以讀文字檔案方式開啟檔案 d jrzh example ex1 1.c 並使fp指向該檔案。如開啟檔案出錯,給出提示並退出程式。程式第1...

C語言檔案操作

1.首先要理解幾個概念 檔案 按一定規則儲存在磁碟上的資料集合。檔名 能唯一標識某個磁碟檔案的字串。形式 碟符 路徑 檔名.副檔名 二進位制檔案 資料以二進位制形式在儲存在磁碟上。裝置檔案 輸入 輸出裝置 標準輸入檔案 鍵盤 標準輸出檔案 標準錯誤輸出檔案 顯示器 檔案型指標 c語言是通過名為fil...

C語言檔案操作

1,兩種檔案訪問方式 輸入,輸出方式 順序訪問 直接訪問 2,資料的兩種存放形式 文字檔案 二進位制檔案 3.檔案指標 定義檔案型別指標變數的一般形式 file 指標變數名 例如 file fp1,fp2 4.開啟檔案 在使用檔案之前,需開啟檔案.在c裡使用fopen函式開啟檔案.格式為 fopen...