小编mun*_*007的帖子

为什么我们必须在 exec 函数中两次传递文件名?

我阅读了 Stevens 所著的Advanced Programming in the UNIX Environment8章。我阅读并理解了所有六个 exec 函数。

我注意到的一件事是,在所有 exec 函数中:

  • 第一个参数是文件名/路径名(取决于 exec 函数)。
  • 第二个参数是我们输入的 argv[0] main(),它是文件名本身。

所以在这里我们必须在函数中传递文件名两次。

有什么原因吗(比如我们无法从第一个参数的路径名中获取文件名)?

command-line exec

16
推荐指数
2
解决办法
7613
查看次数

为什么在程序初始化的时候将errno设置为零,并且在错误发生之前无法测试?

我正在阅读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,只有当函数的返回值表明发生了错误时。我不理解为什么 ?

c error-handling exit-status

5
推荐指数
1
解决办法
7245
查看次数

标签 统计

c ×1

command-line ×1

error-handling ×1

exec ×1

exit-status ×1