题
当开发一个模块(装置驱动程序、中间件,等等。),将运行在内核的空间,我们希望有一些方法来捕的原因的操作可能会失败。
在VxWorks,errno机制似乎是一个很好的方式来做到这一点。
是否有可能定义我自己的errno价值?
解决方案
在该上下文中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你定义的宏观。
其他提示
Errno只是一个数字,像strerror()这样的函数返回一个描述文本。如果你想扩展它,只需提供一个类似于strerror()的自己的函数,它可以查看你的错误列表或委托给strerror()。
不隶属于 StackOverflow