gpt4 book ai didi

c - c中的exec函数没有运行

转载 作者:行者123 更新时间:2023-11-30 14:56:52 25 4
gpt4 key购买 nike

由于某些我无法弄清楚的原因,该程序无法在我的 Mac 上运行。我得到的输出仅来自 main.c输出是

Parent PID 4066
Child PID 4067
Process 4067 exited with status 5

我需要 main.c 来执行 counter.c 并传递参数 5,然后我必须在 for 循环中使用它,但无论我放置什么路径,我都无法让 exec 运行.

//main.c

int main(int argc, char *argv[]) {

pid_t childOrZero = fork();

if (childOrZero < 0){
perror("Error happened while trying to fork\n");
exit(-1);
}


if (childOrZero == 0){
printf("Child PID %d\n", (int)getpid());
execl("./counter", "5", NULL);
exit(5);
}

// THis must be parent
printf("Parent PID %d\n", (int)getpid());
int status = 0;
pid_t childpid = wait(&status);
int childReturnedValue = WEXITSTATUS(status);
printf("Process %d exited with status %d\n", (int)childOrZero, childReturnedValue);

return 0;
}

计数器.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
for (int i = 0; i<5; i++){
printf("Process: %d %d\n", (int)getpid(),i);
//sleep(3);
}
}

最佳答案

在评论中,您提到将 counter.c 编译为名为 a.out 的可执行文件。当您没有向编译器显式提供输出名称时,这是默认的可执行文件名称。因此,如果您同时编译 counter.cmain.c,则只有其中之一是 a.out

您可以为 gcc 提供一个选项来命名与默认值不同的可执行文件:

gcc -o counter counter.c

此外,您对 execl 的调用不太正确。第一个参数是可执行文件的路径,但其余参数将变为 argv[0]argv[1] 等。因此,您确实想要调用 execl这样:

     execl("./counter", "counter", "5", NULL);

关于c - c中的exec函数没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44362121/

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