Linux為什麼
為什麼find
如此喜歡stat
或fstat
?
我試圖在
/usr/bin/find
不做任何事情的情況下展示一些有意義的東西stat
,到目前為止還沒有有用的結果。如果我強行抑制stat
, find 將完全停止下降到子目錄。正如
getdents
係統呼叫手冊頁所說,那裡有d_type
欄位,所以find
應該已經有一些決策所需的資訊。為什麼需要
stat
不管-L
,-H
或任何選項。
使用來源,盧克!
在 GNU
find
原始碼(我正在查看版本 4.2.2)中,遍歷目錄樹的程式碼位於gnulib/lib/fts.c
. 在第 1123 行有以下註釋:記錄 fts_read 與該條目的關係。在很多情況下,它只會簡單地 fts_stat 它,但我們可以利用任何 d_type 資訊來優化掉不必要的 stat 呼叫。即,如果 FTS_NOSTAT 生效並且我們沒有遵循符號連結 (FTS_PHYSICAL) 並且 d_type 表明這不是一個目錄,那麼我們根本不需要統計它。如果是一個目錄,然後(目前)我們無論如何都要統計它,以便獲取設備和 inode 編號。有一天,我們也可能會針對已知 d_ino 有效的目錄進行優化。
所以他們想到了你描述的優化,但沒有實現。