linuxC语言缓冲区及小程序的实现
文章目录
- 1.文件缓冲区
- 1.1介绍
- 1.2缓冲文件系统
- 1.3冲刷函数fflush
- 1.4认识linux下的缓冲区
- 2.linux小程序的实现
- 2.1 回车\r和换行\n
- 2.2倒计时程序
- 2.3进度条小程序
- sleep/usleep
- 代码
- 运行结果
1.文件缓冲区
1.1介绍
为缓和 CPU 与 I/O 设备之间速度不匹配,文件缓冲区用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。
1.2缓冲文件系统
系统自动地在内存为程序中每一个正在使用的文件开辟一块文件缓冲区。
- 从内存向磁盘输出数据,先送到内存中的缓冲区,缓冲区装满后一起输送到磁盘上。
- 从磁盘向计算机读入数据,从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),从缓冲区逐个地将数据送到程序数据区(程序变量等)。
- 缓冲区的大小根据C编译系统决定。
1.3冲刷函数fflush
int fflush( FILE *stream );
将缓冲区内数据写到stream 指定文件。
成功返回 0
错误返回 EOF
高版本vs无法使用
fclose关闭文件时也会刷新缓冲区#include <stdio.h>
#include <windows.h>
int main()
{FILE* pf = fopen("test7.txt", "w");if (!pf){perror(fopen);return 1;}fputs("abcdef", pf); //数据输出到buffer//此时文件中无内容Sleep(10000); //睡眠10sfflush(pf); //刷新缓冲区Sleep(10000); //睡眠10s//此时数据到达文件fclose(pf);pf = NULL;return 0;
}
1.4认识linux下的缓冲区


在linux下gcc编译这两段代码时 结果是不同的 左边先输出后睡眠 右边先睡眠后输出
c语言不是从上到下一行一行执行的吗?
确实是的 实际上printf先于sleep执行但是sleep执行完后这个程序才结束 才会输出信息
为什么执行流到printf时 不直接显示以及为什么左边加了换行就能先显示?
c语言存在输出缓冲区(一段内存空间) 显示器设备一般的刷新策略是行刷新 即碰到\n就把\n之前的所有的字符显示出来 所以左边代码先显示 后边代码存入到缓冲区 直到程序结束才显示
当一个程序执行会自动打开stdin srdout stderr三个标准IO流

如何在没有换行符的情况下让他执行到printf时就显示?

#include <stdio.h>
#include<unistd.h>
int main()
{printf("hello linux!");fflush(stdout);sleep(3);return 0
}
2.linux小程序的实现
2.1 回车\r和换行\n

老式键盘的
Enter: 实际上是 换行+回车[C语言中的\n也是]

#include <stdio.h>
#include<unistd.h>
int main()
{int count = 5;while(count){printf("count是: %d\n",count);count--;sleep(1);return 0;}
}
可以正常输出
#include <stdio.h>
#include<unistd.h>
int main()
{int count = 5;while(count){printf("count是: %d\r",count);count--;sleep(1);return 0;}
}
不输出任何内容
2.2倒计时程序
#include <stdio.h>
#include<unistd.h>
int main()
{int count = 5;while(count){printf("count是: %d\r",count);fflush(stdout);count--;sleep(1);return 0;}
}
每执行一次printf 将要输出的信息输出到缓冲区 当执行fflush函数时 将信息从缓冲区刷到显示器 之后\r回车 光标回到行首 count–
2.3进度条小程序
sleep/usleep


代码

运行结果
linu-vim-c-bar
相关文章:
linuxC语言缓冲区及小程序的实现
文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区 1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配,文件缓冲区用以…...
MySQL数据库基本操作-DDL 数据库基础知识
目录标题 1、数据库操作1-1 查询所有数据库1-2 创建数据库1-3 选择使用那个数据库1-4 删除数据库 2、数据库表操作2-1 创建数据库表2-2 查看当前数据库所有表名称2-3 查看指定某个表的创建语句2-4 查看表结构2-5 删除表 3、修改表结构格式3-1 修改表添加列3-2 修改列名和类名3-…...
基于JavaWeb+SpringBoot+Vue摩托车商城微信小程序系统的设计和实现
基于JavaWebSpringBootVue摩托车商城微信小程序系统的设计和实现 源码传送入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码传送入口 前言 近年来,随着移动互联网的快速发展,电子商务越来越受到…...
idea代码快捷键Mac版
1、查询任何东西 双击 Shift2、文件内查找 Command F 3、文件内替换 Command R4、全局查找(根据路径) Command Shift F5、在当前文件跳转到某一行的指定处 Command L6、退回 / 前进到上一个操作的地方 Command Option 方向键左Command Opt…...
分享76个Python管理系统源代码总有一个是你想要的
分享76个Python管理系统源代码总有一个是你想要的 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 下载链接:https://pan.baidu.com/s/1JtcEHG9m8ro4-dc29kVyDg?pwd8888 提取码:8888 项目名称 A simpl…...
Springboot养老院信息管理系统的开发-计算机毕设 附源码27500
Springboot养老院信息管理系统的开发 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,…...
在虚拟机中安装vim和net-tools,mysql
首先在虚拟机中创建vim目录 sudo mkdir -p /home/user/tools/vim然后开始进行安装 yum install vim -yyum install net-toolsmysql参考链接 安装mysql在虚拟机中...
【Excel】函数sumif范围中符合指定条件的值求和
SUMIF函数是Excel常用函数。使用 SUMIF 函数可以对报表范围中符合指定条件的值求和。 Excel中sumif函数的用法是根据指定条件对若干单元格、区域或引用求和。 sumif函数语法是:SUMIF(range,criteria,sum_range) sumif函数的参数如下ÿ…...
k8s上对Pod的管理部分详解
目录 一.Pod结构介绍 1.user container 2.pause 二.Pod工作形式介绍 1.自主式pod 2.控制器管理下的pod 三.对Pod的操作介绍 1.run/apply -f/create -f运行pod 2.get查看pod信息 3.exec操作运行中的pod (1)进入运行中的pod (2&…...
4.4.2 结构可以将 string类作为成员吗
// structure template { }; 4.4.2 结构可以将 string类作为成员吗 可以将成员name指定为string类对象而不是字符数组吗?即可以像下面这样声明结构吗? #include <string> struct inflatable std :: string name; float volume; double price; 大体上说,答案是肯定的。实…...
npm install 安装总结
npm install moduleName 会把moduleName 包安装到node_modules目录中不会修改package.json之后运行npm install命令时,不会自动安装moduleName npm install moduleName -g 安装模块到全局,不会在项目node_modules目录中保存模块包。不会将模块依赖写入de…...
二十三种设计模式全面解析-组合模式与享元模式的结合应用:实现对象的共享和高效管理
在前文中,我们介绍了组合模式的基本原理和应用,以及它在构建对象结构中的价值和潜力。然而,组合模式的魅力远不止于此。在本文中,我们将继续探索组合模式的进阶应用,并展示它与其他设计模式的结合使用,以构…...
jenkins分步式构建环境(agent)
rootjenkins:~# netstat -antp|grep 50000 tcp6 0 0 :::50000 ::😗 LISTEN 5139/java 1.52 安装Jenkins rootubuntu20:~# dpkg -i jenkins_2.414.3_all.deb 配置各种类型的Agent的关键之处在于启动Agent的方式 ◼ JNLP Agent对应着“通过Java Web启动代理”这种方…...
前端开发学习指南
前端是一个看似入门门槛不高,但要学好很难的领域。前端的知识体系庞杂又松散,技术演进快,如果摸不清脉络的话很容易陷入盲人摸象的困境甚至跑偏。 其实只要掌握了正确的方法,学习前端和学好前端就只是个时间问题,希望下…...
环境变量小节
这是写的第二篇环境变量博客,写了一年多了,第一次出现把自己博客删了的情况,不知道为什么明明发表了,然后就把草稿箱和回收站的删了,结果晚上发现没发表,回收站删除是无法找回的,以后还是要慎重…...
React Native适配Xcode 15 iOS 17.0+
iOS 17.0 Simulator(21A328)下载失败 App Store 更新到 Xcode15 后,无法运行模拟器和真机。需要下载iOS 17对应的模拟器。Xcode中更新非常容易中断失败,可以在官网单独下载iOS 17模拟器文件,例如:iOS_17.0.1_Simulator_Runtime.d…...
Install Docker in Linux
Docker官网链接: https://docs.docker.com/ 1.确定Linux版本 新版本的Docker对Linux系统版本有一定的要求。如果Linux的发行版系统是centOS,安装最新版的docker需要centOS 7以上的系统。 在Docker安装帮助页面查看支持的系统版本。 Docker帮助页面:https://docs…...
Spring源码-循环依赖
循环依赖问题 先分析下bean生命周期, 简化版: 1. 扫描, 获取所有的BeanDefinition,存入BeanDefinitionMap 2. 遍历BeanDefinition, 准备创建bean 3. 推断构造方法, 通过反射, 实例化bean对象(原始对象) 4. 属性赋值 5. 初始化前, 初始化 6. 初始化后, 可能AOP 7. 把经过…...
Excel下拉填充时,如何使得数字不递增?
问题描述:Excel下拉填充时,如何使得数字不递增? 解决办法:先下拉填充数据之后,看到最后一个单元格的右下角有个填充设置的符号,右键选择复制单元格即可。其中这里的填充序列就是递增数字的操作。...
ThreadLocal原理以及内存泄露问题
1、ThreadLocal实现原理 1、每个线程中有一个ThreadLocalsMap,这是一个哈希表的结构里面有很多entry(也就是k-v),当我们使用ThreadLocal进行set值的时候,会将这个threadLocal设置为key,然后值设置为value放入ThreadLocalsMap,key为弱引用&am…...
2026 最新|Open Claw AI 零代码生成 HTML5 企业静态网站 30 分钟上手
教你用 OpenClaw AI 对话能力快速制作企业静态网站,从工具部署、AI 生成、源码保存、本地调试到上线部署,全程清晰实操,轻松掌握本地 AI 建站核心方法。 一、前置准备:部署 OpenClaw,启动 AI 建站 OpenClaw 是 本地离…...
你的Mac还缺这个窗口管理神器吗?告别频繁切换,工作效率翻倍!
你的Mac还缺这个窗口管理神器吗?告别频繁切换,工作效率翻倍! 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在视…...
常见网络攻击
DDoS攻击,CC攻击 CC攻击 DDoS的一种 发送大量的合法请求消耗应用层的资源(CPU,内存,数据等),耗尽资源,比如在教务网站中写死循环脚本持续访问某个资源,无技术难度 防御: 对同IP限流,验证码,行为分析 DDoS 全名分布式拒绝攻击,攻击者控制大量僵尸设备(被植入病毒的电脑,服…...
mysql如何获取最后插入的ID_使用LAST_INSERT_ID函数
用 LAST_INSERT_ID() 获取刚插入的 ID,但必须在同一连接中立即调用,否则可能被其他 INSERT 覆盖;PHP 中应使用 $mysqli->insert_id 或 $pdo->lastInsertId(),避免 mysql_insert_id() 或 SELECT MAX(id)。直接说结论…...
Ostrakon-VL-8B效果集锦:从快餐到宴席,多场景识别实录
Ostrakon-VL-8B效果集锦:从快餐到宴席,多场景识别实录 最近在折腾一些视觉相关的项目,正好深度体验了一下Ostrakon-VL-8B这个模型。说实话,一开始没抱太大期望,毕竟现在各种视觉语言模型层出不穷,但用下来…...
【51单片机实战】智能倒车雷达系统:从超声波测距到分级报警的完整实现
1. 项目背景与核心功能 倒车雷达是汽车电子中非常实用的安全装置,对于电子工程专业的学生来说,用51单片机实现一个简易版的倒车防撞系统是个不错的练手项目。这个系统主要利用超声波测距原理,通过LED灯和蜂鸣器实现分级报警,还能保…...
Security:Elastic Security 实战:从零构建威胁检测与响应闭环
1. Elastic Security 初探:企业安全防护新思路 第一次接触Elastic Security时,我被它"SIEM端点防护"的二合一设计惊艳到了。传统企业安全方案往往需要采购多个独立系统,而Elastic Security直接把日志分析、威胁检测、终端防护这些功…...
从零到一:在eNSP中解锁USG6000V防火墙的Web管理界面
1. 初识eNSP与USG6000V防火墙 第一次接触华为eNSP模拟器和USG6000V防火墙时,我完全被这个虚拟网络实验室震撼到了。想象一下,不用花一分钱买硬件设备,就能在电脑上搭建完整的网络环境,这简直是网络工程师的福音。USG6000V作为华为…...
如何使用DoctrineExtensions的Uploadable扩展:文件上传和管理的完整实现指南
如何使用DoctrineExtensions的Uploadable扩展:文件上传和管理的完整实现指南 【免费下载链接】DoctrineExtensions Doctrine2 behavioral extensions, Translatable, Sluggable, Tree-NestedSet, Timestampable, Loggable, Sortable 项目地址: https://gitcode.co…...
Nanbeige 4.1-3B Streamlit UI实操手册:自定义背景色与气泡样式的修改方法
Nanbeige 4.1-3B Streamlit UI实操手册:自定义背景色与气泡样式的修改方法 1. 引言:从“能用”到“好看”的界面定制 如果你已经体验过Nanbeige 4.1-3B Streamlit WebUI,第一印象可能是“清爽”、“现代”。它确实打破了Streamlit原生界面的…...
