带睡眠的简单 C 代码在执行后没有输出
Simple c code with sleep gives no output after execution
我写了下面这段代码来模拟回调。但这卡住了,甚至没有打印 "inside main"。我在我的 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
打印到stdout
时添加\n
。
printf("inside main\n");
需要 \n
的原因是 printf
在达到 \n
后将数据刷新到 stdout
。
您可以打印到 stderr
以立即查看您的数据,而无需使用 \n
:
fprintf(stderr, "test");
顺便说一下,当调用 printf()
时,输出将写入 stdout
。所以 printf(...)
与 fprintf(stdout, ...)
相同
您看不到任何打印的原因是 crt
(C 运行时)缓冲您的输出,并且仅在累积 K 个字符后才会输出到屏幕。一种解决方案是使用 '\n' - 这提示 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;
}
您必须冲洗stdout
。它可以通过格式字符串中的 '\n'
字符或通过 fflush
命令来完成:
void sleep_50sec() {
printf("inside sleep_50sec");
fflush(stdout);
sleep(50);
}
我写了下面这段代码来模拟回调。但这卡住了,甚至没有打印 "inside main"。我在我的 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
打印到stdout
时添加\n
。
printf("inside main\n");
需要 \n
的原因是 printf
在达到 \n
后将数据刷新到 stdout
。
您可以打印到 stderr
以立即查看您的数据,而无需使用 \n
:
fprintf(stderr, "test");
顺便说一下,当调用 printf()
时,输出将写入 stdout
。所以 printf(...)
与 fprintf(stdout, ...)
您看不到任何打印的原因是 crt
(C 运行时)缓冲您的输出,并且仅在累积 K 个字符后才会输出到屏幕。一种解决方案是使用 '\n' - 这提示 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;
}
您必须冲洗stdout
。它可以通过格式字符串中的 '\n'
字符或通过 fflush
命令来完成:
void sleep_50sec() {
printf("inside sleep_50sec");
fflush(stdout);
sleep(50);
}