再次複習APUE

2021-06-26 04:42:52 字數 977 閱讀 4470

重看apue,做些筆記。

沒心沒肺的玩了乙個國慶,唉,不忍直視。

從現在開始,好好的看書。爭取拿到offer。

每個檔案都有名字,這個是我們使用者空間可以看到的,我們把它稱為目錄。每個目錄都繫結著乙個i節點資訊,即指向著乙個具體的檔案。

所以硬鏈結指的就是,有兩個目錄同時繫結到這個i節點上,代表的是同乙個檔案。所以我們刪掉了這個硬鏈結,其實只表示指向這個i節點的數量-1,不會刪除這個檔案 ,只有當i節點數目的指向數量減少為0的時候,才會刪除這個檔案。

那麼硬鏈結有什麼實用之處呢? 可以備份重要的檔案啊,可以把相對重要的檔案都儲存起來,這樣即使不小心刪除了當前目錄,只要備份的硬鏈結沒有刪掉,檔案就還在。

那有什麼缺點呢? 在乙個檔案系統中,i節點資訊都是分配好的,有各自的管理方法,所以硬鏈結不能跨檔案系統 ,並且不能鏈結目錄,否則陷入死迴圈。

軟連線就是個快捷方式,即這個鏈結檔案的內容,注意,這裡是內容,是資料區的資料指向了另乙個檔案的目錄。而不是i節點資訊,所以目錄被刪,則鏈結失效。 但是這樣可以跨系統了。因為本質上就是通過了中間變數。

無數次的看檔案io了。 

open,read ,write.等等函式,都是系統呼叫層面上的,都是無緩衝的對檔案進行操作。所以物件是檔案描述符。

而 fopen,fread,fwrite等等就是c庫上面的,屬於使用者空間的,具有緩衝,是流處理函式。 那麼什麼是緩衝,打個比方。你要寫資料到檔案中,而檔案位於磁碟上。那麼有緩衝就是先把你的資料寫入記憶體,然後等到把記憶體填滿之後呢再一次性寫入檔案上,這個就是全緩衝。而行緩衝就是寫一行,或者是遇到了換行符號就寫。對於一般的檔案,都是全緩衝,對於終端裝置,就是行緩衝了。

所以我們使用的還是帶有緩衝的,這樣可以避免每次都涉及到系統呼叫,浪費時間。所以這裡分為三種方式去讀寫檔案。

一,乙個乙個字元的去讀寫。 getc, fgetc

二,一行一行字元的去讀寫。gets,fgets

三,上面兩種都不實用的情況,即整個去讀取檔案。  fread,fwrite。

合併果子 再次複習HuffmanTree

合併果子 fruit.pas dpr c cpp 問題描述 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多...

APUE筆記(1) 配置APUE環境

本人用的是centos6.5版本的linux 寫這個環境配置是因為自己這一天被這個環境配置給搞的很難受 首先,我們在linux下找乙個資料夾,存放apue3的包 cd home src wget 然後解壓 tar zxv f src.3e.tar.gz 進入apue.3e資料夾 cd home sr...

apue檔案環境

1,程序表項 a,檔案描述符標誌 close on exec b,指向檔案表的指標 2,核心為開啟的檔案維持一張檔案表 a,檔案狀態標誌 讀,寫,添寫,同步和非阻塞等 b,當前檔案偏移量 c,指向v節點表的指標 3,每個開啟的檔案都有乙個v節點結構。包括了 a,檔案所有者,檔案長度,檔案所在的裝置等...