gpt4 book ai didi

c - 使用 execvp 传递参数

转载 作者:行者123 更新时间:2023-11-30 19:43:50 27 4
gpt4 key购买 nike

我的parent.c 文件中有这个

int main()
{
int n = 6;
int pid;
int status;
char* command = "./child";
for (i=1; i<=n; i++){


if((pid = fork()) == 0) {
execvp(command, NULL);
}
wait(&status);
}

我的 child.c 文件如下所示

int main(int argc, char *argv[]){
char *processnum = argv[0];
printf("This is the child %s\n", processnum);
return 0;
}

我基本上只是运行

gcc -o 父parent.c

gcc -o 子child.c

./父

这会打印出 6 次“This is the child (null)”,这是我所期望的。但我希望能够在运行子进程时传递一个参数,在本例中是进程号。

所以我将parent.c更改为如下所示

for (i=1; i<=n; i++){
if(i == 1){
char* args = "1";
}
if(i == 2){
char* args = "2";
}
if(i == 3){
char* args = "3";
}
if(i == 4){
char* args = "4";
}
if(i == 5){
char* args = "5";
}
if(i == 6){
char* args = "6";
}

if((pid = fork()) == 0) {
execvp(command, args);
}
wait(&status);
}

我认为会发生的是我的程序会打印“这是 child 1”、“这是 child 2”等...

然而,实际发生的情况是,程序似乎多次运行parent.c(我在parent.c的开头放置了一条打印语句,并且输出打印了该语句大约20次)而不是child.c

谁能解释一下为什么会发生这种情况?还有其他方法可以将参数传递给 child.c 吗?

谢谢

最佳答案

here is the critical excerpt from the man page for execvp()

The execv(), execvp(), and execvpe() functions provide an array of
pointers to null-terminated strings that represent the argument list
available to the new program. The first argument, by convention,
should point to the filename associated with the file being executed.
The array of pointers must be terminated by a NULL pointer.

关于c - 使用 execvp 传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112356/

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