在一本关于 Linux 和 Unix 编程的书中,我发现了这个陈述(强调我的):
"所有函数(
exec()
-family)都在出错的情况下返回-1
。否则在成功执行时不会返回调用程序。因此,检查返回值是多余的;您可以直接继续执行错误例程。 "
这似乎符合相应的 Linux手册页:
"返回值 -
exec()
函数仅在发生错误时返回。返回值为-1
, 并errno
设置为指示错误。 "
因此,如果当前过程映像已成功替换为新的过程映像,则不应返回。只有在创建新图像时发生错误时,exec()
-functions 之一才会真正返回 ( -1
)。
反过来,而不是 fe 意味着:
if ( execl("/bin/foo", "foo", "bar", (char *) NULL) == -1 )
{
perror("Execution of foo failed");
// further error routine.
}
一个人可以简单地做:
execl("/bin/foo", "foo", "bar", (char *) NULL);
perror("Execution of foo failed");
// further error routine.
exec()
但是,如果调用者的进一步程序执行已经表明发生了错误,为什么 -family 的函数通常会有返回值呢?函数末尾的简单
return;
语句和相应的返回类型void
就足够了吗?只是为了适应常用方法/实践来始终检查返回值还是有不同的目的?
有关的: