linux 檢視檔案引用計數

2021-09-08 16:32:09 字數 1255 閱讀 7944

一.在對檔案操作的系統呼叫介面,並沒有提供獲取對檔案引用計數的資訊,所有想要獲取此資訊,有兩種方法:

1.在核心中新增乙個系統呼叫.將核心中檔案的引用count計數返回到應用層,這種比較麻煩.不推薦

2.遍歷整個系統中所有程序開啟此檔案的個數./proc/pid/fd/**, 以此來統計引用計數.lsof和fuser可能就是用的此方法,沒有做考證.

例子如下:

june_hou@ubuntu:~$ ps

pid tty time cmd

936 pts/9 00:00:00 bash

3586 pts/9 00:00:00 a.out

4533 pts/9 00:00:00 ps

june_hou@ubuntu:~$ ls -al /proc/3586/fd/ -al

total 0

dr-x------ 2 june_hou june_hou 0 jan 11 13:26 .

dr-xr-xr-x 9 june_hou june_hou 0 jan 11 13:26 ..

lrwx------ 1 june_hou june_hou 64 jan 11 13:26 0 -> /dev/pts/9

lrwx------ 1 june_hou june_hou 64 jan 11 13:26 1 -> /dev/pts/9

lrwx------ 1 june_hou june_hou 64 jan 11 13:26 2 -> /dev/pts/9

lrwx------ 1 june_hou june_hou 64 jan 11 13:26 3 -> /home/june_hou/test.log

lrwx------ 1 june_hou june_hou 64 jan 11 13:26 4 -> /home/june_hou/test.log

june_hou@ubuntu:~$ lsof test.log

command pid user fd type device size/off node name

a.out 3586 june_hou 3u reg 252,7 0 357 test.log

a.out 3586 june_hou 4u reg 252,7 0 357 test.log

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...

引用計數 copy on write

拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...

自動引用計數

使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...