linux 檔案操作雜記

2021-08-21 20:56:15 字數 1836 閱讀 2592

在linux 學習中,檔案操作是乙個十分重要的模組. 

通常, 我們使用open()來開啟檔案. 其實在open()的背後, 有好多有(fu)趣(za)的事情發生.

我們主要來講一下檔案描述符和檔案之間不可描述的關係.

程序級別的檔案描述符表

檔案描述符在形式上是乙個非負整數。實際上,它是乙個索引值,指向核心為每乙個程序所維護的該程序開啟檔案的記錄表。當程式開啟乙個現有檔案或者建立乙個新檔案時,核心向程序返回乙個檔案描述符。在程式設計中,一些涉及底層的程式編寫往往會圍繞著檔案描述符展開。但是檔案描述符這一概念往往只適用於unix、linux這樣的作業系統。

—-維基百科

檔案描述符對於我們而言, 十分熟悉. open函式的返回值即檔案描述符, 在linux中, 每個程序都有乙個檔案描述符表, 裡面每乙個值都對應著等會要講到的開啟檔案表的一項.

系統級別的開啟檔案表

核心為所有開啟檔案位置一張檔案表, 每個檔案表包含:

a. 檔案狀態標誌(讀、寫、添寫等)

b. 當前檔案偏移量

c. 指向該檔案v節點表項的指標(linux 沒有使用v-node, 而使用了i-node)

—- 《apue》

在核心中, 所有開啟的檔案都在一張表中, 由核心進行維護. 程序開啟的檔案描述符表中有一項file ptr, 這一項就是指向開啟檔案表的. 而開啟檔案表裡存放著許多資訊, 並且所有程序指向乙個開啟檔案表, 這也就意味著當前檔案偏移量等資訊是同步的。 如果兩個程序同時操作同一檔案, 可能會出現競爭的情況, 所以要考慮給檔案控制權上鎖, 以形成原子操作。

上文提到不同程序的檔案描述符可以指向同乙個檔案, 其實不同檔案描述符也是可以指向同一檔案的。 要實現不同檔案描述符指向同一檔案, 我們需要使用dup, dup2等函式。

下圖描述了不同程序指向同乙個開啟檔案表

硬體級別的檔案系統

我們可以把乙個磁碟分成乙個或多個分割槽, 每個分割槽都可以包含乙個檔案系統, i 節點固定長度的記錄項, 它包含有關檔案的大部分資訊, 如果觀察乙個柱面組的i節點 和 資料塊部分, 則可以看到圖4-14中所示的情況

—-《apue》

柱面組上的目錄塊裡面包含了檔案的inode編號和檔名, inode節點指向資料塊。 這就是linux檔案系統的經典格式。 如果乙個資料塊不夠存放檔案的話, inode會指向多個資料塊。 也是因為這種設計, 所以linux可能會出現 空餘空間很大, 但是無法新建檔案的問題。

硬鏈結和軟鏈結

區別

如果兩個檔案為硬鏈結關係的話, 如果原檔案刪除, 則另乙個檔案仍能訪問資料, 只是inode的鏈結數減一。 口 .. 口

如果兩個檔案為軟鏈結關係的話, 如果原始檔刪除, 則另乙個檔案不能訪問資料

硬鏈結不能跨磁碟, 而軟連線可以

傳送門:open函式背後的系統調

linux 命令雜記

修改environment檔案後 source environment 重新初始化environment讓剛配置的環境生效 linux 解壓zip uzip n text.zip d tmp n 不覆蓋已經存在的檔案 linux指定安裝目錄 prefix 目錄名 netstat tulnp tcp ...

linux記憶體雜記

1.linux 優先運用物理記憶體,當物理記憶體還有空閒時,linux是不會施放記憶體 的,即使占用記憶體的程式已經被關閉了 這部分記憶體就用來做快取了 也就 是說,即時你有2g的記憶體,用過一段時間後,也會被佔滿。這樣做的裨益是,啟 動那些剛開啟過的程式 或是讀取剛訪問過得資料會比較快,對於伺服器...

Linux 問題雜記

我的linux開不了機了?1 情況一 按開機鍵 開機電源在閃 就是不開機 解決方案 會不會是插上了什麼奇怪的裝置 本人遇到的是插上mini 為什麼修改不了我的裝置中檔案的許可權?1 情況一 插上了toshiba的行動硬碟 執行 sudo chmod 775 myfile.sh ll grep myf...