将execvp与输入文件一起使用到程序,并将输出重定向到新文件

时间:2018-12-12 12:44:21

标签: c linux redirect exec

我确实尝试过使用thisthis,但无法正确使用(请注意链接,然后再将其称为可能的副本)。

在我的程序中,我尝试使用文本文件作为输入来运行程序,并将程序的输出重定向到新文件。

这是我的代码:

if (fork() == 0) {
    char *args[]={"program",">","output.txt",NULL}; 
    int fd = open("/input.txt", O_RDONLY);
    dup2(fd, 0);
    execvp("program",args);

    return 0;
}

program.c是我要运行的程序(不是主程序) /input.txt是我要用作我的program.c输入的文件 而output.txt是我想将程序输出重定向到的文件 我知道要重定向程序输出,我应该使用programname>outputfile

但是我无法使其正常工作,我可能是因为args array做错了。将input.txt作为program.c的输入发送并将其输出重定向到output.txt的正确方法是什么? (请注意,我的主程序不是program.c

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

使用programname>outputfile是Shell的功能。该Shell为您打开输出文件,并将文件描述符复制到1stdout)。

如果您不想运行Shell,则可以像调用opendup2一样进行输入重定向,然后再调用exec*。尝试这样的事情:

int fdOut = open("output.txt", O_WRONLY | O_CREAT);
/* don't forget to check fdOut for error indication */
int rc = dup2(fdOut, 1);
/* also check the return code for errors here */