C系统调用失败

问题描述 投票:1回答:1

[我正在尝试编写处理标准输入和输出并将其重定向到文件的代码,然后使用execvp(也尝试了其他exec来运行仅使用printf和scanf的程序,但是execvp失败。 >

相关代码:

    int pid2 = fork();
    if (pid2 == 0) {
        int fdInput = open("myinputfile", O_RDONLY);
        close(0);
        dup(fdInput);
        int fdOutput = open("results.txt", O_WRONLY | O_CREAT | O_TRUNC);
        close(1);
        dup(fdOutput);
        char* tmp[]={"...somepath/prog"};
        execvp("...somepath/prog", tmp);
    }

我的编:

int main(){
    int x;
    scanf("%d",&x);
    printf("Hello World! %d",x);
    return 0;
}

myinputfile仅包含-> 4

我尝试了两件事:

  • 从prog复制代码并将其硬编码到我的代码中,而不是调用execvp,这很好用,我可以在results.txt中看到“ Hello world!4”
  • 手动在终端中运行“ mypath”,这似乎也可以使用(使用标准I / O)。
  • 我不明白为什么它不起作用,我尽了我所能想到的一切。

我正在尝试编写处理标准输入和输出并将它们重定向到文件的代码,然后使用execvp(也尝试了其他exec来运行仅使用printf和scanf的程序,...

c io system-calls execvp
1个回答
2
投票

您传递给execvp()的参数数组不是NULL终止的。

the POSIX exec() documentation

© www.soinside.com 2019 - 2024. All rights reserved.