printf 函数为啥没有输出?
printf 函数为什么没有输出???#include stdio.h#include stdlib.h#include sys/time.h#include sig
printf 函数为什么没有输出???
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
void handler_sigtime(int signu)
{
switch(signu)
{
case SIGALRM:
printf("receive signal SIGALRM\n");
break;
case SIGPROF:
printf("receive signal SIGPROF\n");
break;
default:
printf("the signu is :%d",signu);
break;
}
}
int main(void)
{
printf("------Main Starting----");
struct itimerval value;
signal(SIGALRM,handler_sigtime); //安装信号处理函数
signal(SIGPROF,handler_sigtime);
value.it_value.tv_sec=1;
value.it_value.tv_usec=0;
value.it_interval.tv_sec=3;
value.it_interval.tv_usec=0;
// setitimer(ITIMER_REAL,&value,NULL); //为了便于查看,我把这两行定时器注释掉了
// setitimer(ITIMER_PROF,&value,NULL);
while(1);
return 0;
}
我在测试的时候,为什么程序已经走到了while循环,“Main starting”却并没有输出呢???难道是定时器和信号处理函数把printf阻塞了吗???谁能详细解释一下
[解决办法]printf("------Main Starting----\n");
[解决办法]printf的内容放在缓冲区里面还没有刷出来
原则上是缓冲区满了以后才输出,成为标准输出流,不过你可以在printf后面加一个fflush(stdout);这样就能立即输出来了
[解决办法]你的printf将输出放到缓冲去以后,缓冲区没有满,之后一直在那死循环,什么已没有做,缓冲区的内容不变,当然不会出来了,如果说程序能从while里跳出来,正常退出的话,也是可以输出来的。或者是你在while里面还有其他的输出内容,让缓冲区变满的话也可以输出来。在后面加fflush和换行符都是将缓冲区里面的东西强制输出到标准流了
[解决办法]用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。
1. 使用fflush(stdout)强制刷新。
2.缓冲区已满。
3.scanf()要在缓冲区里取数据时会先将缓冲区刷新。
4.\n,\r进入缓冲区时。
5.线程结束的时候,如果该线程里也有printf(....);
6. 程序结束时。