错误可以成功吗?

时间:2017-07-14 12:51:13

标签: vxworks errno

我注意到我的vxWorks 6平台在套接字上成功调用write并返回请求写入的字节数,但也将errno从0转换为19(ENODEV )。

我觉得这很令人惊讶。

成功操作后是否可以设置错误?

1 个答案:

答案 0 :(得分:1)

errno.h维基百科上说:

  

值(错误号)由某个库存储在errno中   在检测到错误时起作用。在程序启动时,值   存储为零。 库函数仅存储大于零的值。   无论是否任何库函数都可以改变返回之前存储的值   他们是否发现错误。大多数功能表明他们检测到了   返回一个特殊值,通常为函数NULL   返回指针,返回整数的函数为-1。一些   函数要求调用者将errno预设为零并对其进行测试   然后查看是否检测到错误。

除了ENODEV对于套接字write的奇怪价值之外,认为某些内部操作集errnowrite已恢复(或没有)护理)但不允许将errno重置为0或之前的状态。

暗示errno不能被视为有意义,除了立即在返回值表明errno有意义的函数之后。

由此得出的结论是errno之后不能用于推断errno - 影响操作序列中的失败。

只有在库函数未清除errno中间序列时才能使用此类用途,但由于它们无法清除errno,因此内部恢复的错误情况仍会反映在errno

如果您需要知道某个功能是否失败,您需要立即检查它的结果,并且仅在适用时才查询errno。

您不能使用全局共享变量errno通过函数调用层次结构来隧道退出状态,也不能通过其他方式独立返回成功/失败状态。