2009-10-30 37 views
3

我正在編寫一個使用inotify監視文件訪問的守護進程,並且在遞歸搜索時不會錯過任何內容。我發現this interesting idea並已開始實施它。 ftw()和ftw64()不使用寬度優先算法,其更多的「預定義」。 nftw()給了我深度優先的選項,但我擔心上部葉子的比賽。是否有POSIX函數或glibc擴展實現寬度優先的文件樹遍歷?

我希望我錯過了一些東西,也許是一個GNU擴展?或者我只是看着用類型安全回調來實現我自己(我真的不想這麼做)?

或者,對於這種類型的應用程序,我是否理解寬度優先,深度優先錯誤?

+1

你可能不需要這個了,但我實現了nftw(3)的寬度優先變體:https://github.com/tavianator/bfs/blob/master/bftw.c – 2015-06-15 02:01:27

+0

@TavianBarnes看起來很像很好,很獨立,可能考慮將它發送到[CCAN](http://ccodearchive.net/)?在這個特定的例子中,我只是將深度優先的行爲作爲一個限制,我現在要重新訪問該代碼:) – 2015-06-15 06:51:35

+0

關於CCAN的呃,TIL。我會在進行一些更改並編寫一些測試後考慮上傳它:) – 2015-06-15 14:28:13

回答

1

查看'nftw()'的規範,FTW_DEPTH標誌執行後序(深度優先)遍歷,在訪問目錄節點之前訪問子目錄。

我不認爲任何標準算法都會進行廣度優先搜索。

大概你應該寫一個基於nftw()接口的bfftw()。請注意,您必須在執行掃描的同時遞歸地排列要訪問的項目(目錄)。