【发布时间】:2013-02-13 17:41:38
【问题描述】:
我正在尝试创建一个重定向 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
【问题讨论】:
-
fflush(stdin);和fflush(stdout);之一是未定义的行为 - 我怀疑它是输出行为。如果省略了怎么办? -
我在程序的这一部分不使用 fflush(stdout) 吗?我认为这与我的问题无关
-
在您发布的代码中,有 两个 调用
fflush(stdin);。 -
@H2CO3 它的
stdin,顺便说一句,这是不花哨的=P -
@WhozCraig 谢谢。所以我的怀疑实际上是正确的,对吧?