c - 尽管禁用了缓冲,但 Printf 没有立即打印

标签 c linux printf buffer raspberry-pi3

我在使用 C 中的 printf 函数时遇到问题。它只是不打印输出,尽管禁用了缓冲:

setbuf(stdout, NULL);  

setvbuf(stdout, NULL, _IONBF, 0);

我也在用fflush(stdout);,但还是不行。
这是确切的代码:

int setup(){
    //...
    printf("Setup successful\n");
    fflush(stdout);
    return 0;
}
int main(int argc, char *argv[]){
    setbuf(stdout, NULL);
    setvbuf(stdout, NULL, _IONBF, 0);
    setup();
    //...
)

如果信息有帮助;我在 Linux(树莓派)上。
提前致谢!

最佳答案

我已尝试尽可能接近地重现您的设置。因此,我在 VirtualBox 镜像中安装了 Raspbian(树莓派操作系统),并使用 Geany 创建、编译和执行 C 文件。这是完整的代码:

#include <stdio.h>

int main() {
    printf("Setup successful\n");
}
  1. 将此文件另存为 test.c:

    test.c saved

  2. 接下来,点击“构建”(砖 block 图标):

    build test.c

  3. 最后,运行它(单击纸飞机图标):

    enter image description here

如您所见,此代码正确编译、执行并打印了消息。不需要显式刷新 ( printf to stdout automatically flushes when encountering a newline character )。此行为已标准化并由 Raspbian 安装的工具正确实现,因此非常可靠。

关于c - 尽管禁用了缓冲,但 Printf 没有立即打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350334/

相关文章:

regex - 从 bash 中的字符串中删除所有特殊字符和大小写

linux - 从 proc_fops.open 访问 proc_dir_entry?

具有多个运行接口(interface)的机器上的 Linux 主机名解析

c - 有什么方法可以在 C 中执行这个 void ptr 的 "cast"到结构指针内联?

c - 如何通知工作线程有一些工作需要完成?

c - 首次输出到 stdout 后特定子进程的用户 CPU 时间

c - 父进程正在向子进程发出信号,但子进程的信号处理需要改进

文本文件的副本

c - 打印 double 时 printf 打印零

linux - 如何使用 awk 解析和打印文件中的多行版本号作为一行中的点分隔值