2011-11-07 150 views
4

有沒有辦法將參數發送到ftw()以用於處理路徑上的每個文件/目錄?由於多線程問題,將有關論點作爲全局變量有點困難,即,所有線程都可以看到全局值,這是錯誤的。將參數發送到ftw()

回答

5

正確設計的C回調接口有一個void*參數,您可以使用該參數將周圍代碼中的任意數據傳遞到回調函數中。 [n]ftw沒有這樣的說法,所以你有點兒小溪。

如果您的編譯器支持線程局部變量(__thread存儲區分符),則可以使用它們而不是全局變量;這將工作,但並不比全局更加整潔。

如果您的C庫有fts函數系列,請改用它們。它們適用於大多數現代Unix(包括Linux,OSX和最近的* BSD)以及gnulib has a fallback implementation

+0

謝謝...會給我一個嘗試 –

+0

'__thread'是非標準的,不可移植的,但你可以改爲使用'pthread_key_create'和'pthread_setspecific' /'pthread_getspecific'。 –