1

我正在尝试创建一个重定向 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() 基本上创建了一个虚拟外壳。

我需要能够处理一些类似的事情:

输入.txt:

test1
test2
test3

tac < input.txt > output.txt

输出.txt

test3
test2
test1
4

1 回答 1

1

如果您希望缓冲区的内容成为进程的输入,则需要将该数据写入管道。基本上,您需要创建一个管道然后分叉。子进程将复制其输入以从管道中读取dup2( pfd[ 0 ], STDIN_FILENO ),然后执行,而父进程将数据写入管道的另一端。

于 2013-02-13T18:21:16.987 回答