linuxC语言缓冲区及小程序的实现

news2024/10/6 10:35:14

文章目录

  • 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);        //睡眠10s
	fflush(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1193404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matlab命令行窗口结果显示不全,解析式太长,输出不完整解决办法

一、背景 在运行matlab程序时&#xff0c;有时输出结果太长&#xff0c;命令行窗口无论怎么拉大都显示不全&#xff0c;复制结果也是会有…&#xff0c;而不是完整结果&#xff0c;如下图所示&#xff1a; 双击复制结果显示如下&#xff1a; y: (25exp(-8x)(10exp(8x) - 9))/…

归并分治 笔记

归并分治 前置知识&#xff1a;讲解021-归并排序 原理&#xff1a; (1&#xff09;思考一个问题在大范围上的答案&#xff0c;是否等于&#xff0c;左部分的答案 右部分的答案 跨越左右产生的答案(2&#xff09;计算“跨越左右产生的答案”时&#xff0c;如果加上左、右各自…

ros1 基础学习09 -自定义service服务开发示例

自定义service服务开发示例 如何使用服务一、模型图二、创建功能包三、自定义服务数据3.1 在package.xml中添加功能包依赖3.2 在CmakeLists.txt中添加编译选项3.3 编译生成的C文件和Python库4.1.2 编译整个工作空间 测试&#xff1a; 在ROS中&#xff0c;除了消息这种通信类型外…

云数据安全:在数字时代保护您的宝贵资产

在数字化时代&#xff0c;云计算已经成为企业和个人数据存储和处理的主要方式。然而&#xff0c;与之相伴而来的是日益严峻的数据安全挑战。本文将探讨云数据安全的重要性以及如何在云环境中保护您的数据。 一、云计算的崭新时代 云计算为组织提供了无与伦比的灵活性和效率&…

LinkedList的插入速度一定比ArrayList快吗?

目录 一、有一道经典的面试题&#xff0c;“ArrayList 和 LinkedList 的区别是什么&#xff1f;”1、小白答法&#xff1a;2、入门答法&#xff1a;3、系统回答 二、LinkedList的插入速度一定比ArrayList快吗&#xff1f;三、分析一下两种数据结构的add源码1、先分析熟悉的Arra…

AI生成技术威胁版权保护,水印技术和法律完善是关键/安圭拉小岛以.ai域名注册赚得3000万美元 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 AI生成技术威胁版权保护&#xff0c;水印技术和法律完善是关键 Sam Altman对…

Python数据结构: 列表(List)详解

在Python中&#xff0c;列表&#xff08;List&#xff09;是一种有序、可变的数据类型&#xff0c;被广泛用于存储和处理多个元素。列表是一种容器&#xff0c;可以包含任意数据类型的元素&#xff0c;包括数字、字符串、列表、字典等。本文将深入讨论列表的各个方面&#xff0…

续:将基于Nasm汇编的打字小游戏,移植到DOSBox

续&#xff1a;将基于Nasm汇编的打字小游戏&#xff0c;移植到DOSBox 文章目录 续&#xff1a;将基于Nasm汇编的打字小游戏&#xff0c;移植到DOSBox前情提要细说1 编译2 程序入口3 定位段 运行体验 前情提要 上一篇&#xff1a;【编程实践】黑框框里的打字小游戏&#xff0c;但…

一键创建PDF文档,高效管理您的文件资料

在繁忙的工作中&#xff0c;您是否曾为处理PDF文件而感到烦恼&#xff1f;现在&#xff0c;我们为您推荐一款全新的高效PDF文档管理工具——一键创建PDF文档&#xff0c;让您的工作效率瞬间提升&#xff01; 首先&#xff0c;在首助编辑高手的主页面板块栏里&#xff0c;选择“…

集简云银行系统:API连接广告推广与客服系统,降低企业研发成本

连接多元化软件系统的挑战 在企业进行业财税一体化的进程中&#xff0c;以及企业数字化进程中&#xff0c;企业需要连接多个软件系统。然而&#xff0c;随着业务的发展&#xff0c;使用的软件越来越多&#xff0c;软件与软件之间的连接和数据同步成为了一个挑战。这在公司的财…

【神印王座】林鑫和李馨甜蜜接吻,团灭七阶恶魔,温馨结尾

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《神印王座》80话最新剧情解析。有关李馨与林鑫的爱情故事源于一场争执。那时&#xff0c;两人都年轻气盛&#xff0c;不肯向对方低头。但是&#xff0c;经过一段时间的相处&#xff0c;…

C#,Python实践,用CodeFormer实现人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色

无论是自己、家人或是朋友、客户的照片&#xff0c;免不了有些是黑白的、被污损的、模糊的&#xff0c;总想着修复一下。作为一个程序员 或者 程序员的家属&#xff0c;当然都有责任满足他们的需求、实现他们的想法。除了这个&#xff0c;学习了本文的成果&#xff0c;或许你还…

盘点10个地推拉新和网推拉新app推广接单平台,免费一手渠道平台

首推&#xff1a;”聚量推客“ 一手官签服务商 官方邀请码 000000 在地推行业里&#xff0c;每个人心中的第一的地推拉新app推广接单平台可能不一样&#xff0c;但之所以会把相关的地推拉新app推广平台推上第一的宝座&#xff0c;就是因为这些地推平台有过人的优势。因此本篇文…

JavaScript如何实现钟表效果,时分秒针指向当前时间,并显示当前年月日,及2024春节倒计时,源码奉上

本篇有运用jQuery&#xff0c;记得引入jQuery库&#xff0c;否则不会执行的喔~ <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <meta name"chenc" content"Runoob"> <met…

立体库堆垛机提升电机运行动作功能块

形成允许提升定位距离误差其误差值可要据现场实际更改 进入提升定位范围内

苹果M3 MacBook Pro续航实测 续航超17小时 比 M2 Pro 还要长

苹果公司在日前召开的“来势迅猛”主题活动中&#xff0c;推出了新款 MacBook Pro 机型&#xff0c;搭载全新 3nm M3 系列芯片&#xff0c;显著提高续航表现&#xff0c;苹果表示&#xff0c;新机提供了“Mac 有史以来最长的电池续航”。 配备 M3 芯片的 14 英寸 MacBook Pro 在…

具名挂载和匿名挂载

匿名卷挂载 &#xff1a; -v 的时候只指定容器内的路径 如下面这个&#xff1a;/etc/nginx 1.docker run -d -P --name nginx -v /etc/nginx nginx 2.查看所有卷 docker volume ls 这里发现&#xff0c;这就是匿名挂载&#xff0c;只指定容器内的路径&#xff0c;没有指定…

Redis的内存淘汰策略分析

概念 LRU 是按访问时间排序&#xff0c;发生淘汰的时候&#xff0c;把访问时间最久的淘汰掉。LFU 是按频次排序&#xff0c;一个数据被访问过&#xff0c;把它的频次 1&#xff0c;发生淘汰的时候&#xff0c;把频次低的淘汰掉。 几种LRU策略 以下集中LRU测率网上有很多&am…

blender动画制作软件拓扑全流程

拓扑在三维动画制作中至关重要&#xff0c;原因如下&#xff1a; 1. 动画变形&#xff1a; 自然形变&#xff1a; 良好的拓扑结构能够支持角色或物体在动画中的自然形变&#xff0c;例如关节弯曲、肌肉收缩等。流畅运动&#xff1a; 适当的拓扑有助于保持模型表面的平滑性&…

Simulia仿真之CST的使用指南(1) | 百世慧®

前言 CST是Computer Simulation Technology的缩写,是全球范围内众多工程师都喜欢使用的高端电磁仿真分析软件。 本文又名《智慧的CST生活》这里一共列出了120个章节&#xff0c;其中包括CST使用过程中的有用小技巧&#xff0c;还有给用户提供技术支持的过程中常见的问题。本专…