虽然禁用了缓冲,但Printf不会立即打印

时间:2018-05-15 12:33:44

标签: 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(raspberry Pi)上 提前谢谢!

1 个答案:

答案 0 :(得分:6)

我尝试过尽可能重现您的设置。因此,我在VirtualBox映像中安装了Raspbian(Raspberry Pi操作系统),并使用Geany创建,编译和执行C文件。这是完整的代码:

#include <stdio.h>

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

    test.c saved

  2. 下一步,单击“构建”(砖形图标):

    build test.c

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

    enter image description here

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