gpt4 book ai didi

Unix系统函数实现的困惑

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:32 25 4
gpt4 key购买 nike

<分区>

来自 APUE 的 Unix system 函数的实现:

Figure 8.22 The system function, without signal handling

#include    <sys/wait.h>
#include <errno.h>
#include <unistd.h>

int
system(const char *cmdstring) /* version without signal handling */
{
pid_t pid;
int status;

if (cmdstring == NULL)
return(1); /* always a command processor with UNIX */

if ((pid = fork()) < 0) {
status = -1; /* probably out of processes */
} else if (pid == 0) { /* child */
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
_exit(127); /* execl error */
} else { /* parent */
while (waitpid(pid, &status, 0) < 0) {
if (errno != EINTR) {
status = -1; /* error other than EINTR from waitpid() */
break;
}
}

// if(waitpid(pid, &status, 0) < 0){
// if(errno != EINTR){
// status = -1;
// }
// }
}

return(status);
}

为什么它对 waitpid 使用 while 循环而不是我在注释中添加的 if 语句?我尝试了 if,到目前为止没有出错。

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