2008-09-24 54 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()。

相关问题