当我关闭stdin缓冲区和ungetc到stdin时会发生什么?

时间:2015-10-19 15:25:34

标签: c++ linux io buffer

当我读一本关于linux编程的书时,我想到了它,我在我的计算机上尝试过它并且代码工作得很好,但是我无法理解它是如何工作的,希望有人可以帮我解释一下, 提前致谢! 我的代码如下:

#include <iostream>
#include <cstdio>

using namespace std;

int main() {
    setbuf(stdin, NULL);
    unsigned char ch = 'a';
    unsigned char pch = ungetc(ch, stdin);
    char c = getchar();
    putchar(c);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

无论缓冲区设置如何,ungetc必须始终能够将一个字符推回输入流。如果您尝试推送多个字符,ungetc可能会失败。 (您应该检查失败的返回值。)

  

保证了后退的一个特征。如果在同一个流上调用ungetc函数太多次而没有对该流进行插入读取或文件定位操作,则操作可能会失败。 (§7.21.7.10/第3段)

即使没有输入缓冲区,单个ungetc也是有效的。