1.
linux中檔案系統定義?
檔案系統指的是檔案存在的物理空間,linux中每個分割槽都是乙個檔案系統,都有自己的目錄層次結構,linux會將這些分屬不同分割槽的、單獨的檔案系統按一定的方式形成乙個系統的總的目錄層次結構。
2. linux下檔案的操作有哪些?
和操作一般意義上的檔案一樣,
linux中對檔案的操作只需要五個基本的函式:
open、close
、read
、write
和ioctl
通過呼叫這幾個函式就能對linux中的檔案進行讀、寫等操作。不過,這種操作又分為
系統呼叫
和庫函式呼叫
。簡單的說,系統呼叫是最直接的方式,
庫函式呼叫最終也是通過系統呼叫實現的。可認為庫函式呼叫是對系統調出於效率考慮而做出的優化。
3. 如何來訪問乙個檔案
通過系統呼叫來訪問檔案是最直接的方式。系統呼叫函式直接作用於作業系統核心的裝置驅動程式從而實現檔案訪問。
4. 檔案裡面都有那些描述符?
在系統中需要處理的檔案(讀、寫操作)需要乙個標識,以便在其它地方能識別出這個檔案,於是就產生了檔案描述符。檔案描述符是一些小值整數,簡單的說就是
乙個檔案id用於在系統中唯一的標識檔案。檔案描述符的總數也就是系統可以開啟檔案的最多個數,這取決於系統的配置情況。
當開始執行程式時,也就是系統開始執行時,它一般會有三個已經開啟的檔案描述符。他們是:
· 0:標準輸入
· 1:標準輸出
· 2:標準錯誤
其它檔案的檔案描述符,在呼叫檔案開啟函式open時返回。這就是說,每個裝置對應著乙個檔案描述符。檔案描述符由作業系統分配,每次分配最小的。
5. 關於write系統呼叫的說明
write,就是把緩衝區的資料寫入檔案中。注意,這裡的檔案時廣泛意義的檔案,比如寫入磁碟、寫入印表機等等。
linux中write
()的函式原型:
size_twrite(int fildes, const void *buf, size_t nbytes);
引數說明:
fildes:檔案描述符,標識了要寫入的目標檔案。例如:fildes
的值為1
,就像標準輸出寫資料,也就是在顯示屏上顯示資料;如果為
2 ,則想標註錯誤寫資料。
*buf:待寫入的檔案,是乙個字串指標。
nbytes:要寫入的字元數。
函式返回值:
size_t 返回成功寫入檔案的字元數。需要指出的是,write
可能會報告說他寫入的位元組比你所要求的少。這並不一定是個錯誤。在程式中,你需要檢查
error已發現錯誤,然後再次呼叫write
寫入剩餘的資料。
6. 關於read系統呼叫的說明
系統呼叫
read是從檔案中讀出資料。要讀取的檔案用檔案描述符標識,資料讀入乙個事先定義好的緩衝區。他返回實際讀入的位元組數。
linux中read
的函式原型:
size_t read(intfildes, void *buf, size_t nbytes);
引數說明:
fildes:檔案描述符,標識要讀取的檔案。如果為0
,則從標準輸入讀資料。類似於
scanf
()的功能。
*buf:緩衝區,用來儲存讀入的資料。
nbytes:要讀取的字元數。
返回值:
size_t返回成功讀取的字元數,它可能會小於請求的位元組數。
7. 關於open系統函式的說明
系統呼叫
open的作用是開啟乙個檔案,並返回這個檔案的描述符。
簡單地說,
open建立了一條到檔案或裝置的訪問路徑。如果操作成功,它將返回乙個檔案描述符,read
和write
等系統呼叫使用該檔案描述符對檔案或
裝置進行操作。這個檔案描述符是唯一的,他不會和任何其他執行中的程序共享。如果兩個程式同時開啟乙個檔案,會得到兩個不同的問價描述符。如果
同時對兩個檔案進行操作,他們各自操作,互補影響,彼此相互覆蓋(後寫入的覆蓋先寫入的)為了防止檔案按讀寫衝突,可以使用檔案鎖的功能。這不是
本次重點,以後介紹。
linux中open
的函式原型有兩個:
intopen(const char *path, int oflags);
intopen(const char *path, int oflags, mode_t mode );
引數說明。
path:準備開啟的檔案或裝置名字。
oflags:指出要開啟檔案的訪問模式。open
呼叫必須指定如下所示的檔案訪問模式之一:
8. 關於close系統函式呼叫的說明
close系統呼叫用於「關閉」
乙個檔案,
close
呼叫終止乙個檔案描述符
fildes
以其檔案之間的關聯。檔案描述符被釋放,並能夠重新使用。
close成功返回1
,出錯返回
-1.
#include
intclose(int fildes);
9. 其他和檔案管理有關的系統呼叫有那些
(1)庫函式
為了提高檔案訪問操作的效率,並且使得檔案操作變得更方便,
linux發行版提供了一系列的標準函式庫。他們是一些由函式構成的集合,你可以在自己的程式方便的中使用它們,
去操作檔案。提供輸出緩衝功能的標準
i/o庫就是這樣的例子。你可以高效的寫任意長度的資料塊,庫函式則在需要的時候安排底層函式呼叫(系統呼叫)
(2)標誌i/o庫
標準i/o
庫及其標頭檔案
為底層i/o
系統呼叫提供了乙個通用的介面。這個庫現在已經成為
ansi標準c
的一部分,而前面所講的系統呼叫卻不是。 標準
i/o庫提供了許多複雜功能的函式,用於格式化輸出和掃瞄輸入,它還負責滿足裝置的緩衝需求。
在許多方面,使用標準
i/o庫和使用底層檔案描述符類似。需要先開啟乙個檔案,已建立乙個檔案訪問路徑(也就是系統呼叫中的檔案描述符)
在標準i/o庫中,與檔案描述符對應的叫流(stream
),它被實現為指向結構
file
的指標。
在啟動程式時,有三個檔案流是自動開啟的。他們是:
· stdin:標準輸入
· stdout:標準輸出
· stderr:標準錯誤輸出
10. 常用的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
size_t fwrite(const coid *ptr, size_tsize , 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...