一. linux下檔案的該概念是什麼?
linux中的檔案具有的特點是:可通過作業系統或者程式對外提供資訊,也能對內輸入資訊,可以被建立,刪除。lin
ux中,檔案有特別重要的意義,他們為作業系統和裝置提供了乙個簡單而統一的介面。在linux中,幾乎一切都可以看做是檔案 。
這就意味著,普通程式完全可以像使用檔案(普通定義)那樣使用磁碟檔案、序列口、印表機和其他裝置。
硬體裝置在linux作業系統中也被表示為檔案。 二.
linux下檔案的操作有哪些?
和操作一般意義上的檔案一樣,linux中對檔案的操作只需要五個基本的函式:
open、
close
、read
、write
和ioctl
通過呼叫這幾個函式就能對linux中的檔案進行讀、寫等操作。不過,這種操作又分為
系統呼叫
和庫函式呼叫
。簡單的說,系統呼叫是最直接的方式,
庫函式呼叫最終也是通過系統呼叫實現的。可認為庫函式呼叫是對系統調出於效率考慮而做出的優化。 三.
如何來訪問乙個檔案
通過系統呼叫來訪問檔案是最直接的方式。系統呼叫函式直接作用於作業系統核心的裝置驅動程式從而實現檔案訪問。 四.
檔案裡面都有那些描述符?
在系統中需要處理的檔案(讀、寫操作)需要乙個標識,以便在其它地方能識別出這個檔案,於是就產生了檔案描述符。檔案描述符是一些小值整數,簡單的說就是
乙個檔案id用於在系統中唯一的標識檔案。檔案描述符的總數也就是系統可以開啟檔案的最多個數,這取決於系統的配置情況。
當開始執行程式時,也就是系統開始執行時,它一般會有三個已經開啟的檔案描述符。他們是:
·0:標準輸入
·1:標準輸出
·2:標準錯誤
其它檔案的檔案描述符,在呼叫檔案開啟函式open時返回。這就是說,每個裝置對應著乙個檔案描述符。檔案描述符由作業系統分配,每次分配最小的。 五.
關於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
寫入剩餘的資料。
六.關於read系統呼叫的說明
系統呼叫read是從檔案中讀出資料。要讀取的檔案用檔案描述符標識,資料讀入乙個事先定義好的緩衝區。他返回實際讀入的位元組數。
linux中
read
的函式原型:
size_t read(int fildes, void *buf, size_t nbytes);
引數說明:
fildes:檔案描述符,標識要讀取的檔案。如果為
0,則從標準輸入讀資料。類似於
scanf
()的功能。
*buf:緩衝區,用來儲存讀入的資料。
nbytes:要讀取的字元數。
返回值:size_t返回成功讀取的字元數,它可能會小於請求的位元組數。
七.關於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:指出要開啟檔案的訪問模式。
open
呼叫必須指定如下所示的檔案訪問模式之一:
八.關於close系統函式呼叫的說明
close系統呼叫用於「關閉
」乙個檔案,
close
呼叫終止乙個檔案描述符
fildes
以其檔案之間的關聯。檔案描述符被釋放,並能夠重新使用。
close成功返回
1,出錯返回
-1.#include
int close(int fildes);
九.其他和檔案管理有關的系統呼叫有那些
1.庫函式
為了提高檔案訪問操作的效率,並且使得檔案操作變得更方便,linux發行版提供了一系列的標準函式庫。他們是一些由函式構成的集合,你可以在自己的程式方便的中使用它們,
去操作檔案。提供輸出緩衝功能的標準i/o庫就是這樣的例子。你可以高效的寫任意長度的資料塊,庫函式則在需要的時候安排底層函式呼叫(系統呼叫)
2.標誌i/o庫
標準i/o
庫及其標頭檔案
為底層i/o
系統呼叫提供了乙個通用的介面。這個庫現在已經成為
ansi標準c
的一部分,而前面所講的系統呼叫卻不是。
標準i/o庫提供了許多複雜功能的函式,用於格式化輸出和掃瞄輸入,它還負責滿足裝置的緩衝需求。
在許多方面,使用標準i/o庫和使用底層檔案描述符類似。需要先開啟乙個檔案,已建立乙個檔案訪問路徑(也就是系統呼叫中的檔案描述符)
在標準i/o庫中,與檔案描述符對應的叫 流(
stream
),它被實現為指向結構
file
的指標。
在啟動程式時,有三個檔案流是自動開啟的。他們是:
·stdin:標準輸入
·stdout:標準輸出
·stderr:標準錯誤輸出
十.常用的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,甚至可以是
0size_t fwrite(const coid *ptr, size_t size , size_t nitimes, file *stream);
他從指定的資料緩衝區ptr中把資料寫入檔案流,返回成功寫入的記錄個數。
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);
linux 檔案操作
1 cat 開啟檔案 cat name.txt 開啟檔案name.txt cat 1.txt 2.txt 開啟2個檔案 cat n name.txt 開啟檔案後顯示行號 2 vi 輸出,刪除,查詢,替換,塊操作 等文字操作 vi 的三種基本工作模式 命令列模式,文字輸入模式,末行模式 命令列模式 不...
Linux 檔案操作
1,查詢檔案 find name 名稱 ls find atime 10 記著有乙個點號 兩邊都有空格,代表當前目錄,如果希望顯示系統的所有大於10天的檔案 可以將 換成 代表根目錄 find mtime n print n天前那天改過的檔案 find mtime n print n天以前改過的檔案...
linux檔案操作
unix檔案操作 讀寫操作 標c檔案讀寫 file 代表乙個開啟的檔案 unix linux的檔案讀寫函式 linux系統中 幾乎一切都是檔案,記憶體 目錄 硬體裝置都可以看成檔案。比如 記憶體 對應目錄 proc pid 目錄 可以用 vi 檢視,也是檔案 裝置 dev tty 鍵盤 顯示器 de...