printf线程输出的怪异问题

下午来来相写个小程序的,调试时,遇到的小问题:

C/C++ code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
 
#include<pthread.h>
#include <unistd.h>
 
 
 
void *server( void *arg)
 
{
    printf ( "1222\n" );
    printf ( "fdsafdsafa\n" );
 
    printf ( "thread start...." );
    return ( void *)0;
 
}
 
int main( int argc, char *argv[])
 
{
    pthread_t tidp;
    int ret=-1;
 
   
 
    ret = pthread_create(&tidp,NULL,server,NULL);
    printf ( "wait...." );
 
    while (1);
 
    return 0;   
 
}

最后代码删除到这,发现server函数中printf中有\n的能输出,最后输出没有\n的不输出。。。。google后,说是printf是一个行缓冲打印的东西。。。。。后来做个试验,

C/C++ code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include <unistd.h>
 
 
 
int main( int argc, char *argv[])
 
{
    int ret=-1;
 
   
 
    printf ( "%d" ,1);
    printf ( "wait...." );
 
    while (1);
 
    return 0;   
 
}

以前没有留意。。。。   

 

解释如下

标准输入和标准输出是行缓冲,比如printf,sacnf.  你printf("hello"),这字符串没有\n,就会先存放在缓冲区,这个缓冲区是printf内部malloc的堆区,并不会马上输出到终端,当程序正常结束时(return 0),才会将缓冲区的数据转到相应的地方。如果有\n,则存放到缓冲区后会马上输出到终端。

标准错误不缓冲,也就是不管你有没\n都会马上输出到终端

普通文件的输入输出则是全缓冲 如fprintf,fscanf.,即不管你有没\n都要等把缓冲区装满或程序正常结束是才会把数据转到相应地方。

当然你还可用fflush强制刷新缓冲区将数据转到相应的地方

          

转载于:https://www.cnblogs.com/qq292873711/p/3711214.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值