所以如果我这样做:
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 流中的位置?