0

在开发将在内核空间中运行的模块(设备驱动程序、中间件等)时,我们希望有一些方法来捕获操作可能失败的原因。

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

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

4

2 回答 2

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 设置为您定义的宏。

于 2008-09-24T17:48:52.637 回答
1

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

于 2008-09-24T17:46:12.127 回答