无法理解 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() 函数执行此操作,将输入文件设置为标准输入并创建输出文件并设置它作为标准输出。 这对我有用,也许将来会对某人有所帮助..