我正在尝试创建一个重定向IO的C程序。我已经把产出做好了,但投入似乎更难。也许我只是不太明白,但我正在做这样的事情:
int redFile;
fflush(stdin);
myio = dup(0);
redFile = open(rhs, O_WRONLY, 0644);
dup2(redFile, 0);
close(redFile);
// Any scanf("%s", &buf) here should read from my redFile (correct?) into some buffer, buf[64] or something
fflush(stdin);
dup2(myio, 0);
close(myio);
所以现在我有了一些buf[64],其中有一个文件redFile中的字符串,但是如何将其作为char*lhs(在程序的前面设置)指定的命令的输入。我的整个程序使用execve()创建一个虚拟shell。
我需要能够处理一些像:
input.txt文件:
test1
test2
test3
tac < input.txt > output.txt
输出.txt
test3
test2
test1
最佳答案
如果希望将缓冲区的内容作为进程的输入,则需要将该数据写入管道。基本上,您需要创建一个管道,然后分叉。子项将重复其输入,通过dup2( pfd[ 0 ], STDIN_FILENO )
从管道读取,然后执行,而父项将数据写入管道的另一侧。