C Printf不立即打印,尽管已禁用缓冲

C Printf不立即打印,尽管已禁用缓冲,c,linux,printf,buffer,raspberry-pi3,C,Linux,Printf,Buffer,Raspberry Pi3,我对C中的printf函数有问题。它只是不打印输出,尽管缓冲被禁用: setbuf(stdout, NULL); 及 我还使用了fflush(stdout),但仍然不起作用。 这是确切的代码: int setup(){ //... printf("Setup successful\n"); fflush(stdout); return 0; } int main(int argc, char *argv[]){ setbuf(stdout, NULL

我对C中的printf函数有问题。它只是不打印输出,尽管缓冲被禁用:

setbuf(stdout, NULL);  

我还使用了
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)。

提前谢谢

我已尝试尽可能地复制您的设置。因此,我在VirtualBox映像中安装了Raspbian(Raspberry Pi操作系统),并使用Geany创建、编译和执行一个C文件。以下是完整的代码:

#include <stdio.h>

int main() {
    printf("Setup successful\n");
}
#包括
int main(){
printf(“安装成功\n”);
}
  • 将此文件另存为
    test.c

  • 接下来,单击“构建”(砖块图标):

  • 最后,运行它(单击纸平面图标):


  • 如您所见,此代码正确编译、执行和打印消息。不需要显式刷新()。Raspbian安装的工具将此行为标准化并正确实施,因此它是可靠的。

    如果希望得到答案,则需要显示代码的完整性。“函数setvbuf()成功时返回0。失败时返回非零(模式无效或请求无法执行)。失败时可能设置errno。”您是否在执行开始时/在任何其他printf调用之前将流设置为unbuffered-“setvbuf()函数只能在打开流之后以及对其执行任何其他操作之前使用。”setbuf()也适用。发布一个。不清楚为什么一个完整的可编译代码没有附带悬赏问题。@itzFlubby不描述代码,展示代码。描述代码时说“这基本上就是我告诉计算机要做的”。问题是,计算机并不能“基本上”按照你们告诉他们的去做。他们完全按照你告诉他们的去做。因此,请准确地告诉我们您告诉计算机要做什么,也就是说,将代码显示为其他人可以编译和运行的复制您的问题的代码。首先,请尊重您的巨大努力。如果在打印后直接运行无止境循环,是否会出现相同的输出?。如
    printf(“测试”);while(1){}
    @itzFlubby Yes:缓冲区在遇到
    '\n'
    后立即刷新。输出是终端上的单个“测试”您的情况不是这样吗?不,它不会刷新。这可能与程序使用
    -g
    标志编译以进行调试有关吗?@itzFlubby恐怕不会,
    -g
    不会改变此行为。
    #include <stdio.h>
    
    int main() {
        printf("Setup successful\n");
    }