2008-09-24 77 views
0

在開發將在內核空間運行的模塊(設備驅動程序,中間件等)時,我們希望通過某種方式捕捉操作可能失敗的原因。如何定義我自己的errno值?

在VxWorks中,errno機制似乎是一個很好的方法。

是否可以定義我自己的errno值?

回答

2

在VxWorks中錯誤號的上下文中定義爲兩個16位:

  • 的高位16比特的識別「模塊」,其中發生錯誤。
  • 較低的16位表示該模塊的特定錯誤。

官方vxWorks模塊值(對於errno)位於../h/vwModNum.h文件中。 他們目前正在使用幾百個數字。 這些模塊號碼都具有形式

 
#define M_something (nn << 16) 

它是強烈泄氣修改此(或任何)VxWorks的頭文件。

你可以做的是創建你自己的模塊頭文件,並以足夠大的數字開始,以避免衝突。

 
/* myModNum.h */ 
#define M_MyModule  (10000 << 16) 
#define M_MyNextModule (10001 << 16) 
... 

在單個模塊頭文件中,創建單個的errno值。

 
/* myModule.h */ 
#define S_MyModule_OutOfResources (M_MyModule | 1) 
#define S_MyModule_InvalidHandle (M_MyModule | 2) 
... 

在您的代碼中,您可以將errno設置爲您定義的宏。

1

Errno只是一個數字,像strerror()函數返回一個描述文本。如果要擴展它,只需提供一個類似於strerror()的函數,該函數將查找錯誤列表或委託給strerror()。

相關問題