在開發將在內核空間運行的模塊(設備驅動程序,中間件等)時,我們希望通過某種方式捕捉操作可能失敗的原因。如何定義我自己的errno值?
在VxWorks中,errno機制似乎是一個很好的方法。
是否可以定義我自己的errno值?
在開發將在內核空間運行的模塊(設備驅動程序,中間件等)時,我們希望通過某種方式捕捉操作可能失敗的原因。如何定義我自己的errno值?
在VxWorks中,errno機制似乎是一個很好的方法。
是否可以定義我自己的errno值?
在VxWorks中錯誤號的上下文中定義爲兩個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設置爲您定義的宏。
Errno只是一個數字,像strerror()函數返回一個描述文本。如果要擴展它,只需提供一個類似於strerror()的函數,該函數將查找錯誤列表或委託給strerror()。