无法在 C 语言中关闭线路缓冲

Cannot turn off line buffering in C

提问人:Milk_Cool 提问时间:10/11/2023 更新时间:10/11/2023 访问量:77

问:

因此,我正在处理一个大项目,它需要禁用 stdin 和 stdout 缓冲区,以便立即处理输入和输出。但是,当我尝试使用 or 时,它就不起作用了。这是我的代码:setbufsetvbuf

#include <stdio.h>
#include <stdbool.h>

int main() {
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);
    setbuf(stderr, NULL);
    while(true) {
        char a = getchar();
        printf("%c", a);
    }
    return 0;
}

我正在使用 linux,但是我无法在 Windows 计算机上对其进行测试,因此我无法确认这是否是 linux 问题。

这是它不起作用的视频:https://youtu.be/EWs5H_6h9DQ

c 缓冲区 stdout stdin

评论

2赞 Some programmer dude 10/11/2023
当您禁用流的缓冲时,您仍未关闭终端本身的缓冲。您需要使用 termios 来设置终端属性以禁用其自己的行缓冲。
1赞 0___________ 10/11/2023
这么多缓冲区......
0赞 Some programmer dude 10/11/2023
顺便说一句,请花一些时间阅读帮助页面,参加 SO 导览,并阅读如何提问。另请阅读如何编写“完美”问题,尤其是其清单。请尽量保持问题自成一体,无需使用外部网站来描述行为。
0赞 Milk_Cool 10/11/2023
@Someprogrammerdude它奏效了!tysm!!
0赞 arfneto 10/12/2023
从 Unix 开始,您有一个默认的熟模式来处理流,以及一个可选的原始模式。在 Windows 下,同样的东西称为 LINE INPUT 模式。在 Linux 下,使用 to 设置 ,在 Windows 下,使用控制台功能。它不同但相似。ioctltermiosstruct

答:

0赞 Milk_Cool 10/11/2023 #1

因此,解决方案是使用 .我从这里拿走了代码,它运行良好!termios

评论

0赞 arfneto 10/12/2023
从 Unix 开始,您有一个默认的熟模式来处理流,以及一个可选的原始模式。在 Windows 下,同样的东西称为 LINE INPUT 模式。在 Linux 下,使用 to 设置 ,在 Windows 下,使用控制台功能。它不同但相似。ioctltermiosstruct