在C中重新创建STDIN重定向

时间:2013-02-13 17:41:38

标签: c unix file-io

我正在尝试创建一个重定向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

output.txt的

test3
test2
test1

1 个答案:

答案 0 :(得分:1)

如果希望缓冲区的内容作为进程的输入,则需要将该数据写入管道。基本上,您需要创建一个管道然后分叉。孩子将通过dup2( pfd[ 0 ], STDIN_FILENO )和exec从管道中读取输入,而父级将数据写入管道的另一侧。