gpt4 book ai didi

在父级中捕获子级错误

转载 作者:行者123 更新时间:2023-11-30 18:14:04 26 4
gpt4 key购买 nike

我正在尝试编写以下 C 作业:一个程序 my-if 接受两个参数,它将运行第一个参数,然后在成功时运行第二个参数。这是我想到的:

#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

char ** split(char * s) {
char ** words = malloc(sizeof(char *));
int i = 0;
char * word = strtok(strdup(s), " ");
while (word) {
words = realloc(words, sizeof(char *) * (i + 1));
words[i] = malloc(strlen(word) + 1);
strcpy(words[i++], word);
word = strtok(NULL, " ");
}
words[i] = NULL;
return words;
}


int main(int argc, char * argv[]) {
char ** argv1 = split(argv[1]);
char ** argv2 = split(argv[2]);

int t = fork();
if (t == -1)
exit(1);
else if (t == 0)
execvp(argv1[0], argv1);
else {
int status;
wait(&status);
if (WIFEXITED(status))
printf("exit status %d\n", WEXITSTATUS(status));
}
return 0;
}

我的问题是弄清楚如何捕获子进程中的错误。WIFEXITSTATUS 始终为 0,即使在 shell 中运行相同的命令然后执行“echo $?”将打印 127。例如 my-if 'toto' 'tutu' 会给我一个 WEXITSTATUS = 0,即使

$ toto
$ echo $?
$ 127

我尝试了 WSIGNALED、WSTOPPED,但我真的不知道如何捕获错误。我搜索的方向正确吗,还是完全不同的东西,例如启动一个 shell,然后执行我的命令,而错误是 shell 固有的,而不是命令固有的?

最佳答案

将调用更改为 execvp。尝试:

execvp( argv[1], argv + 1 );

关于在父级中捕获子级错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19516406/

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