Linux——\r,\n和缓冲区

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件) 本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。 阅读详情

\r,\n和缓冲区

C语言中有很多字符

a、可显字符

b、控制字符

\r 回车,\n 换行

当我们打印数据时只加了\n,代码则是正常打印

如果换成\r,则不能正常打印

假如说加个刷新函数

但是还是不行,没打印

而且加上休眠函数也是不能打印

先来看看休眠函数

要是我们把\n去掉了光标就还会在Hello World 那一行后面紧跟着就是命令行

而且在sleep休眠时间长一点的时候,程序似乎是先进行休眠如然后在打印hello world的

但其实并不是这样,代码是从上到下按顺序执行的,一定是先执行完printf再去执行sleep的

只不过在sleep期间,这个hello world没有被刷新,数据一定是在sleep期间被保存起来了

但外什么使用\n就能打印出来呢?

因为缓冲区有自己的刷新策略

行缓冲:只要系统碰到了换行符,那么就会把换行符之前的内容全部刷新出来

这里如果在sleep前面加个刷新函数

运行时发现hello world短暂的出现了几秒,然后就被命令行覆盖了,而且还能发现打印后的光标时在最左边的

要是什么都不带,让系统强制性的去刷新

命令行就会在光标的位置出现

根据这个原理,就可以做一个简单的倒计时程序

那么要是把\n换成\r,是不是每次打印时数字都会覆盖原来的数字,那就只会在一行打印倒计时?

但是结果却不尽人意,什么都没有打印

这是因为数据被放在了缓冲区里了,没有刷新,数据就显示不出来

加上一个刷新函数就能打印出来了,最后的那个\n是为了让命令行不去覆盖倒计时数字

但是倒计时如果是从10开始那就还是有点问题

首先我们要了解,凡是向显示器打印的所有内容,都是字符,pintf函数打印时也是先将内容转换成字符串,最后在一个一个打印出来,我们再看看上面的代码运行结果,能发现效果并不尽人意

其实将输出改成%2d就行了

练习:进度条

可以用刚刚的知识写一个简易的进度条

创建这三个文件,试着实现一下进度条

.h包含方法的声明

.c里包含方法的实现

这时的makefile要依赖两个源文件

现在来写一下代码实现

先定义一个数值在再将他们全初始化成0

进度条主要是用#来进行填充

先来试一下效果,确实能打印,但是并不是再一行内打印,将\n换成\r就可以变成在一行打印了,有了sleep才能以合适再加上刷新就能让存在缓冲区里的数据显示出来

确实可以了,但还可以再优化一下,让右括号固定一下吧,不要随着#增加而移动;

然后底下还有个优化,让休眠时间短一点

但是,好像反了(╯▽╰)

其实给100前面加个负号就行了

这下就可以了

还可以再优化的好看一点 ,给进度条右边加百分比,再加个箭头,这样直观一点

这样看起来顺眼多了

如果还想优化的话还可以加个加载动画

至于代码,\\意思就是\,因为\符号比较特殊,同理,之前写的%%也是这个意思,i%4就能在 0,1,2,3里面循环

而且C语言里还能还能改变输出的颜色,我们也可以给进度条换一个颜色

\033是设置打印出来的结果的所有格式的,后面的是具体要用到的指令

确实变色了

而且还能设置背景颜色,但是这里就不深究了

芯片测试:WAT、CP、FT 最近部门来了一个日本回来的同事,虽然他尽量用非常Poor的中文给我解释一些东西,其中还夹杂着一些英文让我很受挫,于是最近来学一下WAT中的常用的单词含义。直接去查缩写、查单词很难去记住,要把具体的东西放在具体的场景,引发知识的连接才会在脑子里留下一定的映像。感兴趣的一起来学习一下这篇不错的文章吧。注释是我查询记录,如有不妥,欢迎指出修正。 阅读详情

相关推荐

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

Feizhai2的博客 4862

【Linux】Linux和Window下\r与\n的区别、git命令行的使用

作者:小卢专栏:《Linux》、《Git》喜欢的话:世间因为少年的挺身而出,而更加瑰丽。——《人民日报》

一个喜欢猫咪的程序员 6734

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 480

【linux】\r 和 \n 的区别、缓冲区的刷新情况、实例:进度条(用 Makefile 自动化构建)

如题

m0_67470729的博客 4491

不止于HTTPS请求:用VS2022编译的libcurl玩转文件上传和代理设置

本文详细介绍了如何使用VS2022编译的libcurl库实现文件上传和高级代理配置。通过实战代码示例,展示了多部分表单上传、二进制数据上传以及各种代理设置技巧,帮助C++开发者提升网络编程能力。

weixin_28595749的博客 206

高效爬取懂车帝车型数据:从静态解析到动态反爬实战

本文详细解析了如何高效爬取懂车帝车型数据,从静态HTML解析到动态接口反爬的完整实战路径。文章重点介绍了使用浏览器开发者工具定位数据、应对CSS混淆与参数加密等反爬策略,并提供了整合静态与动态抓取逻辑的Python代码示例,帮助开发者稳健地获取结构化车型信息。

wind6的博客 937

彻底解读剪不断理还乱的\r\n和\n, 以Windows和Linux为例

多数程序员都会在不经意间遇到下面这两个问题: 1. linux上用vim写的文件test.txt拷贝到windows上, 结果所有的内容都显示在一行中。(当然, 如果你Windows上的编辑显示器够智能, 那就是另外一回事了) 2. Windows上建立的test.txt拷贝到linux上, 结果linux程序运行异常。(当然, 如果你的linux程序足够健壮

认知 行动 坚持 3万+

在Allegro设计界面中如何修改封装焊盘

在高密度板的情况下,SUIPLA(支持内层没有的焊盘摘掉)打勾,在高密度板的情况下,内层没有的焊盘摘掉可以增加走线的空间。3、修改完焊盘后,选择File→Update to Design(更新到设计)。然后关闭焊盘修改对话框即可。,将会定期不定期更新技术文章,互相学习交流。或者点击Options选项卡下要修改的焊盘,然后点击Edit修改。在Allegro PCB设计界面中修改封装焊盘的方法。2、然后点击封装上要修改的焊盘,右击选择Edit。修改完成后如下图所示。

bhxc809751502的博客 7806

Linux系统中'\r'与‘\n’的区别

浏览https://blog.youkuaiyun.com/qq_42820594/article/details/82421724后自行测试: 由两张图对比可以看出,输出printf('\r'),相当于将光标移动到本行的开头,而'\n'则是移动到另起一行的开头。 根据这样的想法,我将L9输出的---改为一个-。 发现输出abc---,根据实验得出,'\r'将光标移到本行开头,使用printf会...

baidu_36399851的博客 1万+

ABAP Open SQL 数据拷贝导致 SAPSQL_DATA_LOSS:从报错机理到稳妥修复

数据类型与长度不合规。一旦在Open SQL的无损赋值检查里被发现,系统宁可中止也不会偷偷替你截断。把变量声明对齐到字典、在需要时明确表达转换/截断意图、写法上避免落入高危的操作数位置,再配合ATC的预防性检查,既能解决你这次的ST22Dump,也能把同类问题消灭在萌芽状态。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 429

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断数据等,用以评估Dflash空间是否够用。本文基于ETAS软件介绍NVBlock配置生成NVM参数及使用。使用NVBlock配置生成,基本不用手写代码,还是比较方便的。对于Nv block的划分,建议将同时写的一类数据放到一个block中,因为block除了data以外,Fee还会增加一些header数据,占用不少内存。

赞的博客 1884

linux下面r和n的区别,说一说\r与\n

动机今天在用Python读取txt文件的时候,遇到了一个比较坑的问题,那就是“\n”和“\r”究竟有什么区别?”历史在计算机还没有出现之前,人们设计了一种机器叫做电传打字机,这种机器每秒钟可以打10个字符。不过它有个问题,就是打完一行换行的时候,需要0.2s,正好可以打印两个字符,如果这个时候有新的字符传过来,那么这两个新的字符将会丢失。怎么办?研发人员就想了一个办法,在每行后面加上两个表示结束的...

weixin_39590868的博客 2436

Python爬虫实战:绕过Cloudflare反爬的最新技术与完整代码详解

在互联网数据采集领域,越来越多的网站开始部署CDN和安全防护服务,其中 Cloudflare 是最为广泛使用的防护方案之一。它不仅为网站提供DDoS防护,还能通过JS挑战、验证码和行为分析来识别并拦截爬虫。这给爬虫工程师带来了极大挑战——如何在不违反网站服务条款的情况下,实现有效的数据采集?本文将分享Python领域绕过Cloudflare反爬的最新技术方法,结合最新流行库与自动化浏览器,帮助你攻克这一难题。绕过Cloudflare反爬不是一蹴而就,需结合多技术、多策略,持续迭代。

2201_76125261的博客 2628

Linux 之 【基础I/O】(C语言文件缓冲区、\r VS \n)

代码最后创建了子进程,但是在这之前语言层面的缓冲区已经按照行刷新的策略清空完毕,进程退出时的刷新操作并未对数据造成任何影响,所以此时的 fork 调用与否,结果一致。,这显然是为了较少系统调用次数,提高效率,所以 write 调用最先写入 log.txt(无缓冲,立即写入文件),其余的按调用次序写入,但是当进程退出时,,父子进程各自拥有了相同内容的缓冲区,进程退出前,缓冲区内容刷新到内核,最终写入 log.txt 文件当中,结果呈现出两次打印。读取时,若数据不在内核缓冲区,内核会先从磁盘读入页缓存;

zl_dfq的博客 784

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux小程序:进度条

Linux系统下使用C语言实现进度条小程序

2301_76197086的博客 638

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Linux 第十讲 --- 项目篇(一)进度条

在本次课程中,我们通过一个“进度条”项目,综合运用了Linux环境下的核心开发工具,包括vim文本编辑器、gcc编译器、gdb调试器和make项目构建工具。项目目标是实现一个动态显示的终端进度条,支持百分比增长和图形化效果,并通过多文件编程和Makefile编写,巩固了依赖关系与规则设计。通过实践,我们不仅熟悉了工具链的协作,还深入理解了终端输出缓冲机制,为后续学习进程控制打下了基础。下一讲将探讨冯诺依曼体系结构,从硬件层面剖析计算机程序的运行机制。

hi0_6的博客 1138

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux----进度条

n---->解析成\n\r(换行回车)\r----->回车。

2503_92106372的博客 233

LInux下第一个程序:进度条

缓冲区是系统预留的内存区域,其作用是暂时存放输入或输出的数据。引入缓冲区主要是为了平衡高速的 CPU 与低速的 I/O 设备之间的速度差异,进而提升系统的整体性能。

sillyoung的博客 12

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

小小unicorn的博客 1493

深入带你了解Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

深入带你了解Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)

小小unicorn的博客 1511

进度条(倒计时)Linux

\r回车(回到当前行开头)\n换行行缓冲区概念什么现象?什么现象??什么现象???#pragma once 防止头文件被重复包含在main.c中,windows.h是不可以用的,而且sleep是小写,在vs中windows.h是可以的,用大写SleepLinux版本用unistd.hVS版本Linux中,为什么不加\n先停两秒再出现hello worldC语言程序在执行前会默认打开这三个流把文件强制刷新到显示器上要用fflush(stdout),因为这样的情况下,程序运行起来,什么也没有必须要有fflush

ljw的博客 1184

LINUX基础 [四] - Linux工具

在使用make/Makefile前我们首先应该理解各个文件之间的依赖关系以及它们之间的依赖方法。 依赖关系: 文件A的变更会影响到文件B,那么就称文件B依赖于文件A。  例如,test.o文件是由test.c文件通过预处理、编译以及汇编之后生成的文件,所以test.c文件的改变会影响test.o,所以说test.o文件依赖于test.c文件。 依赖方法: 如果文件B依赖于文件A,那么通过文件A得到文件B的方法,就是文件B依赖于文件A的依赖方法。(就是二者通过什么方法联系起来的)

2402_83315537的博客 1157

【Linux入门】2w字详解yum、vim、gcc/g++、gdb、makefile以及进度条小程序

​ 在 Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装。软件包相当于App, 而软件包管理器相当于“应用商店”。而yum就是centos的软件包管理器。yum(Yellow dog Updater, Modifified)是 Linux。

lirendada的博客 2391

linux 4

(4) 检查 file1.o 和 file2.o 是否需要重新生成 • program 依赖于 file1.o 和 file2.o,所以 make 会检查它们是否需要重新编译: ○ file1.o 的规则**:如果 file1.o **不存在**,或者 file1.c 或 file2.h 比它**更新**, make 会执行 gcc -c file1.c -o file1.o 重新编译。规定了文件编译的先后顺序,方式方法,可以带来自动化编译,只用make命令就可以编译。

2402_87261601的博客 362

系统中\r和\n的区别?

系统中\r和\n的区别? 测试时发现 在windows中换行时读出来占两个char, 其实是 \n解释为了  \r\n [cpp] view plain copy  print? #include    using namespace std;      int main()   {       cout "this is the 

DemonDe的博客 6195

终端进度条底层原理:printf、\r与fflush的缓冲区真相

进度条本质是标准输出缓冲区管理问题,而非UI渲染技术。其核心原理在于C标准库对stdout的三种缓冲模式(全缓冲、行缓冲、无缓冲)如何影响字符输出时机;回车符\r实际是行首定位指令,配合fflush强制刷新才能实现单行覆盖式动态更新。该机制广泛应用于Python/R脚本、OpenCV视频处理、STM32串口调试及VLC等流媒体工具中,但一旦遭遇重定向、嵌入式重定向或UTF-8中文输出场景,极易因缓冲策略错配导致printf中文乱码、stm32 h7 printf重定向失效或进度条静止。掌握setvbuf、i

weixin_33843409的博客 384
上一篇: Linux——自动化工具
下一篇: Linux——git和gdb
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值