带睡眠的简单c代码在执行后没有输出

时间:2017-06-13 15:05:15

标签: c sleep

我编写了以下代码来模拟回调。但是这个卡住了,甚至不打印“内部主”。我在我的unix机器和在线编译器上尝试了这个但是行为相同。我错过了什么吗?

#include <stdio.h>
#include <unistd.h>

void sleep_50sec()
{
    printf("inside sleep_50sec");

    sleep(50);

}

int main()
{
    int i;
    printf("inside main");
    sleep(1);

    for( i =0; i < 100;i++)
    {   printf("Loop %d",i);
        sleep_50sec();
    }
return 0;
}

输出

root@xyz> ./a.out

3 个答案:

答案 0 :(得分:3)

打印到\n时添加stdout

printf("inside main\n");

需要\n的原因是printf在达到stdout后将数据刷新到\n

您可以打印到stderr以立即查看您的数据,而无需使用\n

fprintf(stderr, "test");

顺便说一下,当调用printf()输出时会写入stdout。因此printf(...)fprintf(stdout, ...)

相同

答案 1 :(得分:0)

您没有看到任何打印内容的原因是因为crt(C运行时)缓冲了您的输出,并且只会在累积K个字符后输出到屏幕。一种解决方案是使用&#39; \ n&#39; - 这提示crt已写入完整的行,并且将其打印到屏幕上。另一种解决方案是隐式刷新stdout,如下例所示:

#include <stdio.h>
#include <unistd.h>

void sleep_50sec()
{
    printf("inside sleep_50sec");
    fflush(stdout);

    sleep(50);

}

int main()
{
    int i;
    printf("inside main");
    fflush(stdout);
    sleep(1);

    for( i =0; i < 100;i++)
    {   printf("Loop %d",i);
        fflush(stdout);
        sleep_50sec();
    }
return 0;
}

答案 2 :(得分:0)

您必须清空stdout。它可以通过格式字符串中的'\n'字符或fflush命令来完成:

void sleep_50sec() {
    printf("inside sleep_50sec");
    fflush(stdout);
    sleep(50);
}