2011-07-14 42 views
5

我在執行保險絲中的readdir()功能時看到一個奇怪的問題。基本上,當我在保險絲任何目錄下執行 'ls' 的,我得到一個錯誤,如:保險絲readdir返回輸入/輸出錯誤

LS

LS:閱讀目錄:輸入/輸出錯誤

在file1.c file2.c中

但奇怪的是,readdir正在做它應該做的事情。在這個特定的目錄中,我有兩個名爲'file1.c'和'file2.c'的文件,它能夠正確讀取它。

在調試問題時,我注意到導火索'fuse'函數('fuse_fill_dir_t'作爲參數傳遞給readdir())可能導致此錯誤。

這是因爲如果我只使用debug printf打印目錄的內容而不使用填充函數返回內容,則看不到錯誤。

但是,只要我開始使用填充函數返回內容,我開始看到這個錯誤。

我有兩個與此相關的問題:

1)任何人有任何想法,爲什麼填充功能可能會導致這個問題?

2)如何查找fuse_fill_dir_t函數的代碼定義?我已經通過大多數的導火索功能來研究這種論點,但到現在爲止還沒有運氣。

任何幫助表示讚賞!

乾杯, 維奈

回答

1

這種消息可以通過失敗呼叫到其他(可能未實現)FUSE回調像getxattr()引起。然後調用readdir()並獲得正確的結果。

您可以使用密鑰-d(調試模式)調試運行其可執行文件的FUSE文件系統,該調試模式不會守護程序並打印有關FUSE調用的詳細調試輸出。

另外,很高興知道你的平臺是什麼(Linux/OS X/etc)。

+0

我在OS X中有同樣的問題。 –