它的星期六早上,并考虑做一些好事。我遇到了一个非常小的问题,但原因不明。请通过解决这个问题让我的早晨愉快。
我在我的程序中使用了sleep函数,并在调用sleep函数之前使用了printf语句,令我惊讶的是程序在调用printf之前就已经睡了。这是代码....
#include<unistd.h>
#include<stdio.h>
#include<sys/types.h>
int main(){
pid_t pt;
printf("ging to while loop");
printf("im sleeping");
sleep(1);
printf("im awoke");
}
我的电脑是否预见到我的睡眠功能并在睡觉之前?
我看到的另一个令人惊讶的事情是使用换行符使其在调用第一行后进入睡眠状态。这是正常工作。
请解释我这种奇怪的行为?
它在printf调用之前休眠。然后一次打印所有三个结果。请帮忙 PS:LINUX(UBUNTU 14.04),GCC编译器
答案 0 :(得分:2)
这很简单。 stdout
是行缓冲区。当您给出\n
时,只会清除或刷新缓冲区,否则它将无法清除。在程序结束时,它将刷新所有缓冲区。这就是你得到这个的原因
睡眠后printf
声明。
所以让你的printf
像这样。
printf("ging to while loop\n");
printf("im sleeping\n");
请参阅此link.