【问题标题】:How do I define my own errno values?如何定义自己的 errno 值?
【发布时间】:2008-09-24 17:38:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: embedded vxworks


    【解决方案1】:

    在VxWorks的上下文中errno被定义为两个16位:

    • 高 16 位标识发生错误的“模块”。
    • 低 16 位表示该模块的特定错误。

    官方的 vxWorks 模块值(用于 errno)位于 ../h/vwModNum.h 文件中。 他们目前正在使用几百个号码。 这些模块编号的格式都为

    #define M_something (nn &lt&lt 16)

    强烈不鼓励修改这个(或任何)vxWorks 头文件。

    您可以做的是创建自己的模块头文件,并从足够大的数量开始,以免引起冲突。

    /* myModNum.h */ #define M_MyModule (10000 &lt&lt 16) #define M_MyNextModule (10001 &lt&lt 16) ...

    在各个模块头文件中,创建各个 errno 值。

    /* myModule.h */ #define S_MyModule_OutOfResources (M_MyModule | 1) #define S_MyModule_InvalidHandle (M_MyModule | 2) ...

    在您的代码中,您可以将 errno 设置为您定义的宏。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多