无法理解 execvp() 参数的格式
Having trouble understanding the format of execvp() arguments
我目前正在做一个需要使用 execvp 的项目。
我在使用它时遇到了麻烦,因为我无法让它工作,所以它可能与我传递参数的方式有关。
我需要执行我们教授提供给我们的程序。
执行这个程序的参数是:
$ ./bin/aurrasd-filters/aurrasd-gain-double < samples/sample-1-so.m4a > output.m4a
这就是我试图设置参数以使其工作的方式:
int main () {
char *agr2[] = {"./bin/aurrasd-filters/aurrasd-gain-double", "<", "samples/sample-1-so.m4a", ">", "output.m4a", NULL};
if (!fork()) {
execvp(*agr2, agr2);
}
else {
wait(NULL);
printf("Terminated"\n);
}
return 0;
}
这会将所有参数放在正确的位置吗?我似乎无法弄清楚错误在哪里。
我需要做的是重定向标准输出和标准输入。 <
和 >
不是我想的可执行文件的参数。
它看起来像这样:
int main () {
char *arg[] = {"./bin/aurrasd-filters/aurrasd-gain-double", NULL};
char *input = "samples/sample-1-so.m4a";
char *output = "output.m4a";
if (!fork()) {
int input_f;
if ((input_f = open(input, O_RDONLY)) < 0) {
perror("Error opening input file");
return -1;
}
dup2(input_f, 0);
close(input_f);
int output_f;
if ((output = open(output, O_CREAT | O_TRUNC | O_WRONLY)) < 0) {
perror("Error creating output file");
return -1;
}
dup2(output_f, 1);
close(output_f);
execvp(*arg, arg);
_exit(0);
}
else {
wait(NULL);
}
return 0;
}
正如@zwol 上面提到的,我们需要处理 I/O 重定向,我正在使用 dup2()
函数执行此操作,将输入文件设置为标准输入并创建输出文件并设置它作为标准输出。
这对我有用,也许将来会对某人有所帮助..
我目前正在做一个需要使用 execvp 的项目。
我在使用它时遇到了麻烦,因为我无法让它工作,所以它可能与我传递参数的方式有关。
我需要执行我们教授提供给我们的程序。
执行这个程序的参数是:
$ ./bin/aurrasd-filters/aurrasd-gain-double < samples/sample-1-so.m4a > output.m4a
这就是我试图设置参数以使其工作的方式:
int main () {
char *agr2[] = {"./bin/aurrasd-filters/aurrasd-gain-double", "<", "samples/sample-1-so.m4a", ">", "output.m4a", NULL};
if (!fork()) {
execvp(*agr2, agr2);
}
else {
wait(NULL);
printf("Terminated"\n);
}
return 0;
}
这会将所有参数放在正确的位置吗?我似乎无法弄清楚错误在哪里。
我需要做的是重定向标准输出和标准输入。 <
和 >
不是我想的可执行文件的参数。
它看起来像这样:
int main () {
char *arg[] = {"./bin/aurrasd-filters/aurrasd-gain-double", NULL};
char *input = "samples/sample-1-so.m4a";
char *output = "output.m4a";
if (!fork()) {
int input_f;
if ((input_f = open(input, O_RDONLY)) < 0) {
perror("Error opening input file");
return -1;
}
dup2(input_f, 0);
close(input_f);
int output_f;
if ((output = open(output, O_CREAT | O_TRUNC | O_WRONLY)) < 0) {
perror("Error creating output file");
return -1;
}
dup2(output_f, 1);
close(output_f);
execvp(*arg, arg);
_exit(0);
}
else {
wait(NULL);
}
return 0;
}
正如@zwol 上面提到的,我们需要处理 I/O 重定向,我正在使用 dup2()
函数执行此操作,将输入文件设置为标准输入并创建输出文件并设置它作为标准输出。
这对我有用,也许将来会对某人有所帮助..