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

私はこの時点で見つけています..標準入力には、まだ消費していない2行が含まれています。何故ですか?何度リダイレクトしてもバッファが1つしかないから?残りの 2 行を取り除くにはどうすればよいですか?

4

2 に答える 2

5

stdin バッファをフラッシュしていません。基礎となるファイル記述子が復元されたとしても、 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 に答える