linux c printf 不能输出
原因: 输出缓冲区的问题.
unix上标准输入输出都是带有缓存的,一般是行缓存。
对于标准输出,需要输出的数据并不是直接输出到终端上,而是首先缓存到某个地方,当遇到行刷新标志或者该缓存已满的情况下,才会把缓存的数据显示到终端设备上。
ANSI C中定义换行符'\n'可以认为是行刷新标志。所以,printf函数没有带'\n'是不会自动刷新输出流,直至缓存被填满。
解决方案:
方案1、在printf里加"\n" (注意在clion 调试中无效,建议使用方案2 )
方案2、fflush(stdout) 刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上 。
fflush(stdout); // 刷新一下缓冲区 让它马上输出. 在printf 之后调用它,就会马上输出了.
setvbuf(stdout,NULL,_IONBF,0); //如果你嫌上个方法麻烦, 就使用这个函数. 直接将缓冲区禁止了. 它就直接输出了。
这两个函数都是有关流缓冲区的. 具体使用和说明网上有很多. 我只说一下什么是流缓冲区, 是做什么用的。
操作系统为减少 IO操作 所以设置了缓冲区. 等缓冲区满了再去操作IO. 这样是为了提高效率。
下面是测试代码:
方案1:
#include<stdio.h>
#include<unistd.h>void main()
{int i;for(i=0;i<10;i++){printf("\r %d%% is complete.\n",i);sleep(1);}printf("\n");
}
方案2:
#include<stdio.h>
#include<unistd.h>void main()
{int i;for(i=0;i<10;i++){printf("\r %d%% is complete.",i);fflush(stdout);sleep(1);}printf("\n");
}
#include<stdio.h>
#include<unistd.h>void main()
{int i;setvbuf(stdout,NULL,_IONBF,0); //直接将缓冲区禁止了. 它就直接输出了for(i=0;i<10;i++){printf("\r %d%% is complete.",i);sleep(1);}printf("\n");
}
linux c printf 不能输出相关推荐
- linux shell printf 格式化输出 数字 字符串
printf打印格式字符串,解释'%'指令和'\'转义. 1.转义 \a :报警声 \f :换页 \n :新行 \r :回车 \t :横tab \v :竖tab \NNN :一个8进制数,打印asci ...
- linux怎么打印64位数据,printf如何输出64位整数
关于printf函数输出64位数的问题,其实在window下和linux下是不一样的: linux下是 printf("%lld/n",a); printf("%llu/ ...
- printf如何输出64位整数
关于printf函数输出64位数的问题,其实在window下和linux下是不一样的: linux下是 printf("%lld/n",a); printf("%llu/ ...
- Linux 下的格式化输出命令:print
原文链接:http://blog.csdn.net/zgf19930504/article/details/51912765 printf 是linux 下的格式化输出命令,有点儿类似于python ...
- linux 终端控制-- 多彩输出 格式排版
linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...
- linux c打印日志文件,linux c下log输出代码模板示例代码
前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...
- matlab printf格式化输出,Shell printf格式化输出命令
printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...
- Shell printf格式化输出命令
printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...
- linux查看输出的信息,linux查看java的输出信息
linux查看java的输出信息 [2021-02-04 22:41:35] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&quo ...
最新文章
- Javascript基础与面向对象基础~第四讲 Javascript中的类对象
- 仿IPhone滚轮组件分析WheelScroller
- JavaScript 事件——“事件类型”中“复合事件”和“变动事件”的注意要点
- 学习node js 之微信公众帐号接口开发 准备工作之三
- 查找删除Code First Entity Framework基本与最佳添加(add/create),删除(delete/remove),修改(update/modify)操作...
- Oracle修改字段类型方法
- 11 Python之初识函数
- springboot2整合mysql5_SpringBoot2整合SSM框架详解
- Android之复选框对话框
- 如何安装无签名认证的rpm包
- sp根据备份文件来创建DB
- 《CCNA网络技术学习指南》-命令版
- [ 物联网篇 ] ESP32 AWS IoT and Amazon Alexa Development / FreeRTOS平台的Alexa语音助手
- 【numpy学习】numpy教程--基于莫烦python的教程
- OpenGL ES2 0 – Iphone开发指引
- 好笑的GIF动态表情包怎么制作
- Android apps 拍立知-功能实现(百度tts语音合成使用)
- 芭蕉树上第十二根芭蕉--opencv配置问题
- php面试题之三——PHP语言基础(基础部分)
- 解决html中表格线条粗细不一的问题