c - 为什么 printf() 之后的行调用 sleep() 在打印任何内容之前执行?

标签 c printf sleep

我以为我在这里做的事情很简单,但 C 决定对我进行异步处理。我不确定发生了什么。这是我的代码:

#include <stdio.h>
int main() {
    printf("start");
    sleep(5);
    printf("stop");
}

当我编译并运行时,我注意到 sleep(5) 非常有效。但是编译器认为跳过第一个 printf() 并乱序是个好主意,所以在运行时,程序等待 5 秒然后打印 开始停止

这是怎么回事?我的理论是程序使用 shell 启动打印操作,然后继续执行程序,让 Bash 等待程序不再忙以实际呈现字符串。但我真的不知道。

谢谢

最佳答案

printf 使用缓冲输出。这意味着数据在刷新到输出源之前首先在内存缓冲区中累积,在本例中为 stdout(通常默认为控制台输出)。在您的第一个 printf 语句之后使用 fflush 以强制它将缓冲数据刷新到输出源。

#include <stdio.h>
int main() {
    printf("start");
    fflush(stdout);
    sleep(5);
    printf("stop");
}


另见 Why does printf not flush after the call unless a newline is in the format string?

关于c - 为什么 printf() 之后的行调用 sleep() 在打印任何内容之前执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182554/

相关文章:

c++ - 从 C 代码中调用 R 脚本

c - 用右手原理解迷宫

c - ./geany_run_script.sh : Segmentation fault

C printf 说明符 %lld 打印字符 "ld"

java - 在一段时间内阻塞对对象的方法调用

python - python 中的多线程 : when does a thread become inactive?

c - 有没有办法包装具有 va_args 参数的函数?

cmd 不适用于 C 项目

C printf 到自定义硬件

c - 唤醒休眠线程