0

所以如果我这样做:

dup2(0, backup); // backup stdin
dup2(somefile, 0); // somefile has four lines of content
fgets(...stdin); // consume one line
fgets(....stdin); // consume two lines
dup2(backup, 0); // switch stdin back to keyboard

我在这一点上发现.. stdin 仍然包含我没有使用的两行。这是为什么?因为无论您重定向多少次,都只有一个缓冲区?如何摆脱剩下的两行,但当我想回到它时仍然记得我在 somefile 流中的位置?

4

2 回答 2

5

您还没有刷新标准输入缓冲区。即使底层文件描述符被恢复,它也缓冲了 somefile 的所有行。

于 2010-05-02T12:28:05.160 回答
0
dup2(0, backup); // backup stdin 
dup2(somefile, 0); // somefile has four lines of content 
fgets(...stdin); // consume one line 
fgets(....stdin); // consume two lines 
dup2(backup, 0); // switch stdin back to keyboard
于 2010-05-02T12:24:41.253 回答