我目前正在爲Linux內核構建一個模塊。我的工作版本是3.8-rc3 +。我的工作使我執行一些ioctl()
命令。如你所知,我的命令應該返回一個合適的錯誤代碼來描述執行過程中出錯的地方。這看起來很簡單,但我有一個用例,我不知道應該返回哪個錯誤代碼。我應該使用哪個錯誤值?
基本上,我希望用戶能夠爲給定設備設置加密密鑰。我的模塊將密鑰存儲在R-B樹中,由設備唯一標識符(一個基本的int
)索引。如果「目標」設備在樹中已經有一個條目,那麼這個條目應該被更新,否則,模塊只是用請求的加密密鑰向該設備的樹添加新分配的條目。
- 東西模塊內部可能使用用戶想要更新密鑰:模塊返回
EBUSY
錯誤試圖設置鍵這就是說,多件事情可能會發生。 - 沒有輸入和分配失敗:
ENOMEM
錯誤。 - 該模塊正在釋放其資源。現有的密鑰條目可能被標記爲刪除(該條目有一個標記爲
dying
的信號):在內部,我當前使用EPERM
錯誤代碼,因爲調用者沒有「權限」來在其被銷燬時更改條目。
正如我所說的,對於後一種情況,我用EPERM
錯誤代碼,但它是錯的我有一種感覺,我不知道哪個錯誤代碼,我應該使用用於這一目的。歡迎任何建議!
我還指定了linux標記,因爲ioctl()
可以在用戶空間應用程序中使用。
編輯:通過評論和答案看了之後,我想我會這樣說:
- 當模塊釋放其資源,
ESHUTDOWN
將被退回。 - 當只有目標密鑰被銷燬時,其餘的 樹仍然健全,將使用
EACCES
。
你大概可以使用任何, 的#define的EACCES 13/*權限被拒絕* /#定義 14 EFAULT/*錯誤地址* /#定義 EBUSY 16/*設備或資源忙*/ – 2013-03-05 09:00:42
@KinjalPatel我不能如果我想區分使用案例1和使用案例3,則使用'EBUSY'。'EFAULT'不適用,因爲該命令具有良好的參數,並且不會發生段錯誤。 'EACCES'可以做到這一點,但我也有感覺這不是它最初的目的。我對嗎 ? – Rerito 2013-03-05 09:09:17
是的,EACCES通常用於用戶權限。但在你的情況下,我認爲它合適 – 2013-03-05 09:21:32