gpt4 book ai didi

vxworks - errno可以设置成功吗?

转载 作者:行者123 更新时间:2023-12-02 17:18:11 26 4
gpt4 key购买 nike

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

我发现这很令人惊讶。

运行成功后是否可以设置errno?

最佳答案

关于 errno.h维基百科说:

A value (the error number) is stored in errno by certain libraryfunctions when they detect errors. At program startup, the valuestored is zero. Library functions store only values greater than zero.Any library function can alter the value stored before return, whetheror not they detect errors. Most functions indicate that they detectedan error by returning a special value, typically NULL for functionsthat return pointers, and −1 for functions that return integers. A fewfunctions require the caller to preset errno to zero and test itafterwards to see if an error was detected.

因此,除了 ENODEV 的奇怪值外用于 socket write认为一些内部操作集 errno 似乎是合理的和 write已恢复(或不关心)但不允许重置 errno到 0 或之前的值。

言外之意就是errno不能被认为是有意义的,除非在返回值指示 errno 的函数之后立即是有意义的。

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

这种用途只有在库函数清除 errno 时才有可能中间序列,但因为他们不明确 errno , 内部恢复的错误条件仍然反射(reflect)在 errno 中.

如果您需要知道某个函数是否失败,您需要立即检查它的结果,并且是否适用。

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

关于vxworks - errno可以设置成功吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com