gpt4 book ai didi

C 如何使用 cmd 传递参数并在 execvp 中使用它

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

我尝试使用命令行将参数发送到 C 文件,然后将其用作 execvp 函数的参数

int main (int argc, char **argv){
pid_t p;

char * vec [] = {*argv, (char*)NULL};

for(i = 0; i < argc ; i++){
p = fork();

if(p > 0 ){
//Fork validations
}else{
execvp(vec[0], vec);
exit(1);
}
}
}

在 shell 中我尝试使用 ./executable 3 ls ps who

之后程序卡住并且不显示命令!

有什么帮助吗?

最佳答案

你的问题很简单。您的定义不是根据您的参数执行命令

char *vec[] = {*argv, (char*)NULL};

或更容易理解,

char *vec[] = {argv[0], (char*)NULL};

事实上,您从未更改此 vec,这意味着您正在重新执行名称位于 argv[0] 中的命令... 可执行文件的名称,以便您的代码不断执行自身并始终 fork 自身,从而创建 fork 炸弹

<小时/>

您想要做的是从参数执行命令。我不确定 3 在参数中的作用,但我认为您想从那里将​​其余部分作为命令执行:

char *vec[] = {0, 0};
// only process arguments starting from 2 (a.k.a ls in your example)
for(i = 2; i < argc ; i++){
vec[0] = argv[i];
if (!fork()) {
execvp(vec[0], vec);
exit(1);
}
}

当然,如果您不传递可变数量的参数,则不必使用 execvpvecexeclp 会正常工作:

for (i = 2; i < argc; i++) {
if (!fork()) {
execlp(argv[i], argv[i], (char*)0);
exit(1);
}
}

关于C 如何使用 cmd 传递参数并在 execvp 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35976178/

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