【发布时间】:2015-02-25 04:49:42
【问题描述】:
调用uname(2)后是否需要检查错误?
根据手册页:
成功时,返回零。出错时,返回 -1,并且 errno 为 适当设置。
在错误标题下,
EFAULT buf 无效。
是列出的唯一错误。
因此,如果给定一个有效的struct utsname 缓冲区,我是否可以假设uname 永远不会失败?
【问题讨论】:
调用uname(2)后是否需要检查错误?
根据手册页:
成功时,返回零。出错时,返回 -1,并且 errno 为 适当设置。
在错误标题下,
EFAULT buf 无效。
是列出的唯一错误。
因此,如果给定一个有效的struct utsname 缓冲区,我是否可以假设uname 永远不会失败?
【问题讨论】:
没有。
仅仅因为EFAULT 是列出的唯一errno,并不意味着只要您传递一个有效的缓冲区,uname 就永远不会失败。它可能因任何其他原因而失败。即如果uname 的返回码是-1,那么无论errno 的值如何,它都会失败。
errno 仅在函数/系统调用指示失败时才有意义;它本身并不定义库函数/系统调用的成功/失败。
【讨论】:
LD_LIBRARY_PATH 替换为另一个实现。但后者需要另一个版本的 libc,对吧。