gpt4 book ai didi

c - execvp - 处理带有转义空格的 arg

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

我正在制作一个基本的外壳,它工作正常,但有一个问题。目前,如果我提供诸如

之类的参数
cat testtextfile

execvp 命令工作正常。但是,如果我提供类似

cat hello\ world

即。名称中带有空格的文件,该命令将不起作用。我如何让 execvp 理解这种类型的参数。

以下是我的代码的摘录,如果我将 args3[1] 更改为“-n”之类的内容,它就会起作用:

char *args3[3];

args3[0] = "cat";
args3[1] = "hello\\ world";
args3[2] = NULL;

if ((child = fork()) == 0) { //child
printf("pid of child = %ld\n", (long) getpid());
execvp(args3[0], args3); //arg[0] is the command

fprintf(stderr, "execvp failed \n");
exit(1);
} else { //parent

if (child == (pid_t)(-1)) {
fprintf(stderr, "fork failed.\n"); exit(1);
} else {

if (doNotWait == 0){
c = wait(&cstatus); //wait for child
printf("child %ld exited with status = %d\n",
(long) c, cstatus);
} else {
printf("not waiting for child process\n");
}
}

}
return 0;

最佳答案

args3[1] = "hello\\ world";

应该是

args3[1] = "hello world";

在命令cat hello\world中,您需要转义“hello”和“word”之间的空格,因为您不希望shell将“hello world”视为两个单词,因此之后shell 正确处理了命令行参数,cat 的第一个参数应该是 hello world,而不是 hello\world

关于c - execvp - 处理带有转义空格的 arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926829/

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