linux學習 檔案操作

2021-08-11 06:20:40 字數 2767 閱讀 3473

1.

linux中檔案系統有什麼特點? 1)

linux下一切皆檔案,目錄也是檔案,裝置也是檔案。 2)

linux的檔案型別有

普通檔案,目錄檔案,鏈結檔案,塊裝置,字元裝置,

socket,

管道檔案

。通過」ls-l」可以檢視檔案型別和屬性

– 普通檔案;

d 目錄檔案;

l 鏈結檔案;

c 字元裝置;

b 塊裝置;

p 管道檔案;

f 堆疊檔案;

2.什麼是檔案描述符?

當某個程式開啟檔案時,作業系統返回相應的檔案描述符,程式為了處理該檔案必須引用此描述符。所謂的檔案描述符是乙個低階的正整數。最前面的三個檔案描述符(0,1,2)分別與標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)對應。因此,函式 scanf() 使用 stdin,而函式 printf() 使用 stdout。

3.檔案中檔案的使用者級別

使用者:使用者是能夠獲取系統資源的許可權的集合

每個使用者賬戶都擁有唯一的使用者名稱和各自的口令

分類:管理員

root,

普通使用者,系統使用者

使用者組:組是許可權的容器

每個使用者都有乙個使用者組,系統可以對乙個使用者組中的所有使用者進行集中管理

分類:普通使用者組(可以加入多個使用者),系統組(一般加入一些系統使用者)。

4.帶快取和不帶快取的

i/o操作區別

1:不帶快取,不是直接對磁碟檔案進行讀取操作,像read()和write()函式,它們都屬於系統呼叫,只不過在使用者層沒有快取,所以叫做無快取io,但對於核心來說,還是進行了快取,只是使用者層看不到罷了。   

2:帶不帶快取是相對來說的,如果你要寫入資料到檔案上時(就是寫入磁碟上),核心先將資料寫入到核心中所設的緩衝儲存器,假如這個緩衝儲存器的長度是100個位元組,你呼叫系統函:

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

寫操作時,設每次寫入長度count=10個位元組,那麼你幾要呼叫10次這個函式才能把這個緩衝區寫滿,此時資料還是在緩衝區,並沒有寫入到磁碟,緩衝區滿時才進行實際上的io操作,把資料寫入到磁碟上,所以「不帶快取不是就沒有快取直寫進磁碟」就是這個意思。

那麼,既然不帶快取的操作實際在核心是有快取器的,那帶快取的io操作又是怎麼回事呢?

帶快取io也叫標準io,符合ansi c 的標準io處理,不依賴系統核心,所以移植性強,我們使用標準io操作很多時候是為了減少對read()和write()的系統呼叫次數,帶快取io其實就是在使用者層再建立乙個快取區,這個快取區的分配和優化長度等細節都是標準io庫代你處理好了,不用去操心,還是用上面那個例子說明這個操作過程:

上面說要寫資料到檔案上,核心快取(注意這個不是使用者層快取區)區長度是100位元組,我們呼叫不帶快取的io函式write()就要呼叫10次,這樣系統效率低,現在我們在使用者層建立另乙個快取區(使用者層快取區或者叫流快取),假設流快取的長度是50位元組,我們用標準c庫函式的fwrite()將資料寫入到這個流快取區裡面,流快取區滿50位元組後在進入核心快取區,此時再呼叫系統函式write()將資料寫入到檔案(實質是磁碟)上,標準io操作fwrite()最後還是要掉用無快取io操作write,這裡進行了兩次呼叫fwrite()寫100位元組也就是進行兩次系統呼叫write()。

總結:無快取io運算元據流向路徑:資料——核心快取區——磁碟

標準io運算元據流向路徑:資料——流快取區——核心快取區——磁碟

(1)creat函式:用於建立檔案

(2)open函式:用於開啟檔案

(3)read函式:用於從已開啟的檔案讀取資料

(4)close函式:用於關閉檔案

(5)write函式:用於將資料寫入已開啟的檔案內

(6)lseek函式:用於移動檔案的讀寫位置

標準i/o提供了三種型別的緩衝

1.1全緩衝:填滿標準i/0緩衝區才進行實際的操作。

1.2行緩衝:當輸入和輸出中遇到換行符,標準i/o庫執行i/o操作。

1.3不帶緩衝:標準i/o庫不對字元進行緩衝儲存。

2.fopen函式:用於開啟檔案

3.flocse函式:用於關閉函式

4.fdopen:用於將檔案描述詞轉為檔案指標

5.fread函式:用於從檔案流讀取資料

6.fwrite函式:用於將資料寫至檔案流

7.fssek函式:用於移動檔案流的讀寫位置

7.fgetc,getc,getchar

有什麼區別

fgetc

函式用於從檔案中讀取乙個字元,

getc

用於從檔案中讀取乙個字元,

getchar

用於從標準輸入裝置內讀取乙個字元。

8.fputc,putc,putchar

有什麼區別

fputc

用於將一指定字元寫入檔案流中,

putc

函式用於將一指定字元寫入檔案中,

putchar

函式用於將指定的字元寫到標準輸出裝置

9.fgets

和gets

的區別fgets

函式用於從檔案中讀取一字串,

gets

函式用於從標準輸入裝置內讀取一字串

10.printf

,sprintf

,fprintf

函式的區別

1.printf函式:用於格式化輸出資料

2.fprintf函式:用於格式化輸出資料至檔案

3.sprintf函式:用於格式化字串複製

Linux學習 檔案操作

正在學習linux,記錄一下學習歷程。在linux中,檔案指三類 普通檔案,目錄,偽檔案。簡便起見,普通檔案通常被稱為檔案,目錄和偽檔案則被認為是檔案的特殊形式。參考資訊 linux學習 檔案系統 linux學習 目錄操作 本文所指的所有檔案都是普通檔案。建立檔案 如何建立乙個檔案呢?實際上,並不用...

Linux學習 檔案目錄操作篇

linux的目錄以 樹 的結構分布,而最初的節點就是根目錄,在根目錄下各個主要目錄如下 目錄內容 bin 構建最小系統所需要的命令的存放目錄 boot 核心與啟動檔案存放目錄 dev 裝置檔案存放目錄 etc 系統軟體的啟動和配置檔案的存放目錄 home 使用者的主目錄 lib c編譯器的庫 med...

Linux學習 檔案

chmod 更改檔案9個屬性 linux檔案屬性有兩種設定方法,一種是數字,一種是符號。linux檔案的基本許可權就有九個,分別是owner group others三種身份各有自己的read write execute許可權。先複習一下剛剛上面提到的資料 檔案的許可權字元為 rwxrwxrwx 這...