我确实尝试过使用this和this,但无法正确使用(请注意链接,然后再将其称为可能的副本)。
在我的程序中,我尝试使用文本文件作为输入来运行程序,并将程序的输出重定向到新文件。
这是我的代码:
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
)
任何帮助将不胜感激
答案 0 :(得分:0)
使用programname>outputfile
是Shell的功能。该Shell为您打开输出文件,并将文件描述符复制到1
(stdout
)。
如果您不想运行Shell,则可以像调用open
和dup2
一样进行输入重定向,然后再调用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 */