如何定义自己的errno值?

时间:2008-09-24 17:38:06

标签: embedded vxworks

在开发将在内核空间中运行的模块(设备驱动程序,中间件等等)时,我们希望能够通过某种方式捕获操作可能失败的原因。

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

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

2 个答案:

答案 0 :(得分:2)

在VxWorks的上下文中,errno被定义为两个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 :(得分:1)

Errno只是一个数字,像strerror()这样的函数返回一个描述文本。如果你想扩展它,只需提供一个类似于strerror()的自己的函数,它可以查看你的错误列表或委托给strerror()。