gpt4 book ai didi

c - 从 execv() 获取返回值

转载 作者:太空狗 更新时间:2023-10-29 16:12:38 26 4
gpt4 key购买 nike

//code for foo (run executable as ./a.out)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/wait.h>

int main (int argc, char **argv) {
pid_t pid;
pid = fork();
int i = 1;
char *parms[] = {"test2", "5", NULL}; //test executable named test2
if(pid < 0) {
fprintf(stderr, "Fork failed");
return 1;
}
else if(pid == 0) {
printf("Child pid is %d\n", pid);
i = execv("test2", parms); //exec call to test with a param of 5
}
else {
wait(NULL);
}
printf("I is now %d\n", i); //i is still 1 here, why?
return 0;
}

大家好,我正在尝试学习一些关于 fork 和 execv() 调用的知识。我让上面的 foo.c 程序调用一个我命名为 test.c 的文件。我 fork 了一个 child ,让 child 调用 execv,这只会将 10 添加到读入的参数中。我不确定为什么变量没有改变,在我的 foo.c 函数的底部。调用需要是指针还是返回地址?任何帮助将不胜感激。谢谢

test.c 的代码(名为 test2 的可执行文件)

#include <stdio.h>

int main(int argc, char ** argv[]) {
int i = atoi(argv[1]);
i = i +10;
printf("I in test is %d\n", i);
return i;
}

最佳答案

您只在子进程中调用 execv()。如果成功运行,exec() 系列函数永远不会返回。参见 evec(3) :

The exec() functions only return if an error has occurred. The return value is -1, and errno is set to indicate the error.

您在父进程中打印了 i 的值,它在父进程中从未改变。


要从子进程中获取退出状态,您可以使用wait()。或 waitpid() :

else {
int waitstatus;
wait(&waitstatus);
i = WEXITSTATUS(waitstatus);
}

关于c - 从 execv() 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923078/

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