我阅读了 Stevens 所著的Advanced Programming in the UNIX Environment,第8章。我阅读并理解了所有六个 exec 函数。
我注意到的一件事是,在所有 exec 函数中:
main()
,它是文件名本身。所以在这里我们必须在函数中传递文件名两次。
有什么原因吗(比如我们无法从第一个参数的路径名中获取文件名)?
我正在阅读errno
有关<errno.h>
头文件变量的可用材料。
我读 :
“ 0 值表示程序中没有错误。” 和“作为一个好习惯,开发人员应该errno
在程序初始化时设置为 0”
按照惯例,我们errno
仅在发生错误时才检查变量(例如某些返回 -1 的函数)。
问题1:那errno
在启动程序之前设置为0有什么用。
更多,我读到最好将错误号存储到局部变量然后检查它,即
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码printf()
中errno
,如果 发生某些错误,函数调用可能会覆盖 的值printf()
。
问题2:上面的说法是否适用于perror()
和strerror()
,因为它们也是系统调用,并且它们也有可能发生错误。
在 Richard Stevens 所著的 UNIX 环境中的高级编程中,我读到我们应该检查 的值errno
,只有当函数的返回值表明发生了错误时。我不理解为什么 ?