errno 在 VxWorks PPC 中总是返回零

Posted

技术标签:

【中文标题】errno 在 VxWorks PPC 中总是返回零【英文标题】:errno returns zero always in VxWorks PPC 【发布时间】:2010-03-26 15:36:01 【问题描述】:

我在 VxWorks PPC 上运行我的代码,如果系统调用失败,尤其是对于套接字发送/接收函数,errno 总是返回 0。

经过一些分析我发现,如果所有系统调用失败,errno 返回 0。

为了让 errno 返回正确的值,我应该做任何初始化吗?

【问题讨论】:

您是否包括了“<errno.h>”而不是“extern int errno;”?您是否从系统调用中得到错误指示? errno 变量不会被库归零,但仅在系统调用返回错误指示时才相关。 是的。我包括 但不包括'extern int errno'。有关系吗?我的代码编译和链接很好。我的系统调用肯定会返回错误指示。 errno 并不是真正的“extern int errno;”。这不允许多个线程,因为它们必须共享一个 errno,并且您永远不会知道该值真正属于哪个线程。这是一个扩展为一些代码以访问线程本地版本的宏,所以它应该很重要。 【参考方案1】:

从外壳(内核或主机)中,如果您键入“i”命令,您将获得任务列表。其中一个字段是 errno 值。找到有错误的任务,设置errno值。

检查 errno 时,您必须处于导致错误的同一任务中:

if(ERROR = someSystemFunction())
  printf("errno=%x", errno);

你不能在 shell 中期望打印 errno

-> errno     (<---- will NEVER work)
errno:0x123455 value: 0 = 0x0

【讨论】:

【参考方案2】:

errnoGet() 将返回执行它的任务的 errno。 请参阅 errnoLib 上的文档以检索不同任务的 errno

【讨论】:

以上是关于errno 在 VxWorks PPC 中总是返回零的主要内容,如果未能解决你的问题,请参考以下文章

我们的 PPC 管理机构是不是使用机器人?

VxWorks_PCI函数注释

开发工具,仿真器,烧录器,编译器,交叉编译器到底是啥关系?

VxWorks任务间通信

ORA-01427:单行子查询返回多行 - 如何修复?

linxu中系统错误码errno