当前位置: 首页 > news >正文

Linux 文件操作-标准IO函数1-文件指针、文件缓冲区(行缓冲、全缓冲、无缓冲)的验证

目录

1.文件指针

2.文件缓冲区

2.1 行缓冲

2.2. 全缓冲

2.3. 无缓冲

3. 程序验证:

(1)main.c执行test1(),打印hello world,不加 \n 换行符

(2)刷新缓冲区方法1:使用\n

(3)刷新缓冲区方法2:程序正常结束

(4)刷新缓冲区方法3:使用fflush函数刷新

(5)刷新缓冲区方法4:当缓冲区满的时候自动刷新,默认行缓冲的大小为1024个字节


1.文件指针

文件指针就是用于标识一个文件的,所有对文件的操作都是用对文件指针进行操作
定义文件指针的一般形式为:
FILE * 指针变量标识符;
本质上文件指针是一个结构体指针,结构体中包含了当前文件的很多信息,但是在实际
编程时,
不需要关系结构体中的成员,只需要使用文件指针即可 对文件操作的步骤:
1、对文件进行读写等操作之前要打开文件得到文件指针
2、可以通过文件指针对文件进行读写等操作
3、读写等操作完毕后,要关闭文件,关闭文件后,就不能再通过此文件指针操作文件
c语言中有三个特殊的文件指针无需定义,在程序中可以直接使用
1. stdin: 标准输入 默认为当前终端(键盘)
我们使用的scanf、getchar函数默认从此终端获得数据
2. stdout: 标准输出 默认为当前终端(屏幕)
我们使用的printf、puts函数默认输出信息到此终端
3. stderr: 标准错误输出设备文件 默认为当前终端(屏幕)
当我们程序出错使用:perror函数时信息打印在此终端

2.文件缓冲区

2.1 行缓冲

  1. 标准io库函数往标准输出(屏幕)输出东西的时候是行缓冲的。
  2. 所谓的行缓冲就是缓冲区碰到换行符的时候才刷新缓冲区。
  3. 如果不刷新缓冲区,无法对文件执行读写操作

2.2. 全缓冲

标准io库函数 ,往普通文件读写数据的,是全缓冲的, 碰到换行符也不刷新缓冲区,即缓冲区满了,才刷新缓冲区
刷新缓冲区的情况
1.缓冲区满了,刷新缓冲区
2.人为刷新缓冲区 fflush(文件指针)
3.程序正常结束 会刷新缓冲区

2.3. 无缓冲

在读写文件的时候通过系统调用io (read write),对文件进行读写数据
这个时候是无缓冲的,即写数据会立马进入文件,读数据会立马进入内存

3. 程序验证:

(1)main.c执行test1(),打印hello world,不加 \n 换行符

程序:

#include <stdio.h>void test1()
{//由于printf函数是一个标准io,所以只有刷新缓冲区才可以将数据输出到终端printf("hello world");
}int main(int argc, char const *argv[])
{test1();printf(" test 已执行 ");while(1) ;return 0;
}

运行结果:不加 \n 换行符,程序一直卡住,不能输出 hello world

(2)刷新缓冲区方法1:使用\n

程序:

#include <stdio.h>void test2()//验证刷新缓冲区方法1:使用\n,缓冲区,程序可以正常输出
{//由于printf函数是一个标准io,所以只有刷新缓冲区才可以将数据输出到终端printf("hello world\n");
}int main(int argc, char const *argv[])
{test2();printf(" test 已执行 ");while(1) ;return 0;
}

运行结果:

(3)刷新缓冲区方法2:程序正常结束

#include <stdio.h>int main(int argc, char const *argv[])
{//刷新缓冲区方法2:程序正常结束printf("hello world2 ");return 0;while(1) ;return 0;
}

运行结果:程序正常结束,直接return,也可以正常输出

(4)刷新缓冲区方法3:使用fflush函数刷新

程序:

#include <stdio.h>void test3()//验证缓冲区方法3:使用fflush函数刷新,程序可以支持输出
{
//由于printf函数是一个标准io,所以只有刷新缓冲区才可以将数据输出到终端printf("hello world3 ");//fflush:刷新函数。可以刷新指定的缓冲区//stdout:标准输出,就是对终端进行写操作fflush(stdout);
}int main(int argc, char const *argv[])
{test3();printf(" test 已执行 ");while(1) ;return 0;
}

运行结果:

(5)刷新缓冲区方法4:当缓冲区满的时候自动刷新,默认行缓冲的大小为1024个字节

程序:

#include <stdio.h>void test4()//验证缓冲区方法4:缓冲区满,刷新
{	 int i; for(i = 1; i < 300; i++){printf("%03d ", i);//3位数字,加1位空格,4个字节}}int main(int argc, char const *argv[])
{test4();printf(" test 已执行 ");while(1) ;return 0;
}

运行结果:打印结果三个字符加一个空格,打印一次4字节, 256*4 = 1024

相关文章:

Linux 文件操作-标准IO函数1-文件指针、文件缓冲区(行缓冲、全缓冲、无缓冲)的验证

目录 1.文件指针 2.文件缓冲区 2.1 行缓冲 2.2. 全缓冲 2.3. 无缓冲 3. 程序验证&#xff1a; &#xff08;1&#xff09;main.c执行test1(),打印hello world&#xff0c;不加 \n 换行符 &#xff08;2&#xff09;刷新缓冲区方法1&#xff1a;使用\n &#xff08;3&am…...

中国历史文化名城分布矢量数据

中国&#xff0c;这片古老而厚重的土地&#xff0c;承载着上下五千年的文明&#xff0c;从北国的冰天雪地到南疆的热带雨林&#xff0c;从东海之滨的波涛汹涌到西域大漠的风沙漫天&#xff0c;无数的历史文化名城如繁星般散布其间。 它们是岁月长河中沉淀下来的瑰宝&#xff0…...

蓝桥杯十天冲刺-day1(日期问题)

日期问题 基础循环遍历模板 对于蓝桥杯所有的日期问题遍历&#xff0c;都可以使用的上 for(year2000;year<2022;year) for(month1;month<12;month) for(day1;day<31;day) {if(month1||month3||month5||month7||month8||month10||month12);else if(month2){if((year…...

漏洞知识点《Tornado框架中RequestHandler的对象》

Tornado框架中RequestHandler的所有对象 [SUPPORTED_METHODS, _INVALID_HEADER_CHAR_RE, __class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__,…...

动态规划(6.不同路径II)

题目链接&#xff1a;63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 本题为不同路径的变型&#xff0c;只不过有些地方有「障碍物」&#xff0c;只要在「状态转移」上稍加修改就可解决。 状态表示&#xff1a; 对于这种Γ路径类」的问题&#xf…...

【算法学习】最小公倍数问题

前言&#xff1a; 求最小公倍数的两种算法&#xff1a; 求两个正整数的最小公倍数&#xff0c;比如3和5的最小公倍数是15&#xff0c;6和8的最小公倍数是24。 本片讨论如何求两个数的最小公倍数&#xff0c;第一种方法是通过最大公约数来求&#xff0c;第二种方法是累加法。 由…...

Spring Boot 整合 Apache Flink 教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 整合 Apache Flink 教程 一、背景与目标 Apache Flink 是一个高性能的分布式流处理框架&#xff0c;而Spring Boot提供了快速构建企业级应用的…...

进制转换(R转十)(1290. 二进制转换十进制、1292. 十六进制转十进制、1291. 八进制转十进制、1405. 小丽找潜在的素数)

题单地址&#xff1a;题单中心-东方博宜OJ 这里以二进制转十进制为例&#xff08;按位加权求和法&#xff09; 1290. 二进制转换十进制 问题描述 请将一个 25 位以内的 2 进制正整数转换为 1010 进制&#xff01; 输入 一个 25 位以内的二进制正整数。 输出 该数对应的…...

通过启用Ranger插件的Hive审计日志同步到Doris做分析

以下是基于Apache Doris的Ranger Hive审计日志同步方案详细步骤&#xff0c;结合审计日志插件与数据导入策略实现&#xff1a; 一、Doris环境准备 1. 创建审计日志库表 参考搜索结果的表结构设计&#xff0c;根据Ranger日志字段调整建表语句&#xff1a; CREATE DATABASE IF…...

Node.js框架Express、Koa、Koa2、Egg 和 NestJS 的对比分析

以下是 Express、Koa、Koa2、Egg 和 NestJS 的对比分析&#xff0c;从多个维度梳理它们的区别和适用场景&#xff1a; 1. 历史背景与定位 框架背景与定位ExpressNode.js 早期框架&#xff0c;灵活轻量&#xff0c;生态丰富&#xff0c;适合快速开发简单应用。KoaExpress 原班团…...

蓝桥杯--冲刺题单--随时更新

冲刺题单 感谢up主溶金落梧桐&#xff08;uid:40733116&#xff09;&#xff0c;我是看了他的视频后总结的。 简单模拟&#xff08;循环数组日期进制&#xff09; 1.蓝桥19723–分布式队列 package datasimulation;import java.util.Scanner;public class Test3 {//计算数组…...

新一代电子数据取证专家 | 苏州龙信信息科技有限公司

本文关键词&#xff1a;电子取证、手机取证、计算机取证、云取证 关于我们About us 苏州龙信信息科技有限公司专注于电子数据取证、大数据、信息安全等领域&#xff0c;核心业务主要涵盖取证工具研发、大数据融合分析、案件技术支持、取证能力培训等&#xff0c;先后为执法部门…...

SSRF 攻击与防御:从原理到落地实践

1. 什么是 SSRF&#xff1f; SSRF&#xff08;Server-Side Request Forgery&#xff09; 是一种常见的Web安全漏洞。当服务器提供了某种对外请求的功能&#xff0c;如“URL 参数直接转发请求”&#xff0c;攻击者就可以通过精心构造的URL&#xff0c;让服务器“自己”去访问特…...

socks 协议介绍

SOCKS协议详解 一、基本定义与核心功能 SOCKS&#xff08;Socket Secure&#xff09;是一种网络传输协议&#xff0c;主要用于通过代理服务器转发客户端与目标服务器之间的通信请求。其核心功能包括隐藏用户真实IP地址、穿透防火墙限制以及支持多种网络协议&#xff08;如TCP…...

不使用负压电源,ADC如何测量正负压?

电路图来自ZLinear的开源数据采集板卡DL8884_RFN&#xff0c;是一个比较常见的电压偏置采集法 对电路进行分析&#xff0c;所以说可以先看下采集卡的模拟输入部分的参数如下&#xff1a; 通道数量: 8通道单端输入/4通道差分输入 分辨率: 16位逐次逼近型(SAR) ADC 采样速率: 40…...

服务的拆分数据的迁移

参考&#xff1a; 数据迁移调研...

强推 Maven多镜像源快速切换工具,GUI操作超便捷

引言 在开发过程中&#xff0c;配置Maven的settings.xml文件以优化依赖下载速度是一个常见的需求。然而&#xff0c;手动编辑XML文件不仅繁琐&#xff0c;还容易出错。本文将介绍如何使用Python和Tkinter构建一个图形界面工具&#xff0c;帮助开发者快速、安全地切换Maven镜像…...

Qt6.8实现麦克风音频输入音频采集保存wav文件

一.本文目的 实现在Qt中接收麦克风数据并保存为WAV文件,使用QAudioInput来录音,并使用QFile来保存数据到WAV文件。 开发环境:QT6.8 本文用极简代码实现,核心代码只需不到100行。 二.代码实现...

自动驾驶AEB误触发率评估的必要测试里程估计

文章目录 一 问题背景与行业挑战二 数学建模框架2.1 基础假设2.2 贝叶斯推断流程先验分布选择: 使用 Γ \Gamma Γ分布作为 λ \lambda λ的共轭先验参数 α 0 \alpha_0 α0​和 β 0 \beta_0 β0​的工程物理意义可靠性判断条件 三 数值求解方法1. 无信息先验场景 ( α 0 1 ,…...

python3 -m http.sever 8080加载不了解决办法

解决方法很多,本文设置各种处理方法,逻辑上需要根据你的自身情况选择 我会告诉你遇到这种问题怎么做,根据具体症状处理 如需转载,标记出处 背景: 1。如图 2.。域名访问不了 http://www.meiduo.site:8080/register.html 上面的域名访问不了,下面的倒是正常 http://127…...

BYU-YOLO数据格式准备

BYU - Locating Bacterial Flagellar Motors 2025(在3D断层扫描图像中定位细菌鞭毛马达) 一、数据介绍 1.竞赛介绍 在本次竞赛中,您的任务是在3D断层扫描图像中找到鞭毛马达的中心位置。断层扫描图像是物体的三维体积表示。每个断层扫描图像作为一个独立的目录提供,其中…...

java NIO中的FileSystems工具类可以读取本地文件系统,ZIP/JAR等,无需解压处理,还可以复制文件

在Java NIO&#xff08;java.nio.file包&#xff09;中&#xff0c;FileSystems 是一个工具类&#xff0c;用于操作和管理文件系统。它提供了静态方法来获取或创建文件系统实例&#xff0c;并支持自定义文件系统实现。以下是其核心功能和用法&#xff1a; 1. 核心功能 (1) 获取…...

群体智能优化算法-模拟退火优化算法(Simulated Annealing, SA,含Matlab源代码)

摘要 模拟退火&#xff08;SA&#xff09;算法是一种基于物理退火过程的全局优化算法&#xff0c;其核心思想来源于热力学中的退火过程&#xff1a;将材料加热到高温后再缓慢冷却&#xff0c;使其分子结构趋于最低能量状态&#xff0c;从而获得稳定结构。SA 算法利用 Metropol…...

knowledge-微前端(多个前端应用聚合的一个应用架构体系,每个小的应用可独立运行,独立开发,独立部署上线)

1.前言 微前端&#xff0c;将一个大的前端应用拆分为多个小型的&#xff0c;独立开发的前端应用&#xff0c;每一个小型的应用都可以单独的开发&#xff0c;部署和运行。这种结构允许不同的团队使用不同的技术栈来开发应用的不同部分&#xff0c;提高开发的效率与灵活性。 2.实…...

目标检测中归一化的目的?

在目标检测任务中,归一化坐标和尺寸时需要除以图像的宽度和高度,主要有以下几个原因: 1. 统一尺度 不同图像可能具有不同的宽度和高度。通过将坐标和尺寸除以图像的宽度和高度,可以将所有图像的标注信息统一到相同的尺度范围([0, 1])。这使得模型在训练和推理时能够处理…...

HarmonyOs- UIAbility应用上下文

上下文为何物 上下文在计算机科学领域是一个广泛存在的概念。是现代操作系统核心抽象概念之一。其本质是环境信息的结构化封装。 有过开发经验的都知道&#xff0c;当我们在一个系统上进行开发的时候&#xff0c;无论是Android&#xff0c;HarmonyOs&#xff0c;Linux 等等&a…...

鸿蒙开发真机调试:无线调试和USB调试

前言 在鸿蒙开发的旅程中&#xff0c;真机调试堪称至关重要的环节&#xff0c;其意义不容小觑。虽说模拟器能够为我们提供初步的测试环境&#xff0c;方便我们在开发过程中快速预览应用的基本效果&#xff0c;但它与真机环境相比&#xff0c;仍存在诸多差异。就好比在模拟器中…...

【门店租金指定日期区间计算】

目录 一、背景&#xff08;一&#xff09;业务场景&#xff08;二&#xff09;相关数据支撑 二、计算方法统一封装&#xff08;一&#xff09;门店租金数据表格逻辑&#xff08;二&#xff09;业务逻辑详细解释&#xff08;三&#xff09;具体代码 一、背景 &#xff08;一&am…...

Dify:开源大模型应用开发平台全解析

从部署到实践&#xff0c;打造你的AI工作流 一、项目简介 Dify 是一款面向开发者和企业的开源大语言模型&#xff08;LLM&#xff09;应用开发平台&#xff0c;旨在降低AI应用开发门槛&#xff0c;让用户通过可视化界面快速构建、管理和部署基于大模型的智能应用。其名称寓意“…...

使用DDR4控制器实现多通道数据读写(四)

在创建完DDR4的仿真模型后&#xff0c;我们为了实现异步时钟的读写&#xff0c;板卡中在PL端提供了一组差分时钟&#xff0c;可以用它通过vivado中的Clock Wizard IP核生成多个时钟&#xff0c;在这里生成两个输出时钟&#xff0c;分别作为用户的读写时钟&#xff0c;这样就可以…...

BFS--------N叉树的层序遍历

429. N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08…...

蓝桥杯备考----小贪心+分类讨论问题---Popsicle

这道题有点小贪心的意思&#xff0c;小老鼠每次都想阻碍小猫最多&#xff0c;老鼠每次阻碍猫的话&#xff0c;可能是把0变成9 也可能是把1变成9&#xff0c;再有可能把2变成9&#xff0c;把3变成9&#xff0c;小老鼠的贪心就是尽可能更多的阻碍小猫拿冰棍&#xff0c;所以小老…...

强大的AI网站推荐(第一集)—— Devv AI

网站&#xff1a;Devv AI 号称&#xff1a;最懂程序员的新一代 AI 搜索引擎 博主评价&#xff1a;我的大学所有的代码都是使用它&#xff0c;极大地提升了我的学习和开发效率。 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…...

【问题解决】Postman 测试报错 406

现象 Tomcat 日志 org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation HTTP状态 406 - 不可接收 的报错&#xff0c;核心原因 客…...

互联网it常用抓包工具说明

一、引言 在互联网 IT 领域&#xff0c;无论是网络故障排查、安全检测&#xff0c;还是开发调试&#xff0c;抓包工具都发挥着举足轻重的作用。 当网络出现故障&#xff0c;比如网页加载缓慢、应用无法连接服务器时&#xff0c;抓包工具可以帮助我们捕获网络数据包&#xff0…...

RS485总线加终端电阻可能存在的问题

目录 1、降低驱动信号幅值 2、增大通信线压降 3、增大收发器功耗 4、降低总线空闲时的差分电压 尽管终端电阻能有效减少信号反射、提高信号质量&#xff0c;但它也引入了一系列问题&#xff0c;需要在设计中谨慎考虑。以下是几个常见问题的详细分析&#xff1a; 1、降低驱…...

在 Linux 系统上部署 Deepseek AI 的全面指南‌

对于所有希望亲身体验 AI 魅力的玩家来说&#xff0c;本文将提供一个详尽的教程&#xff0c;指导你在 Linux 系统上部署 Deepseek AI。无论你是技术小白还是有一定基础的用户&#xff0c;都能轻松跟随本文完成部署。 ‌一、关于 Ollama‌ Ollama 是一款功能强大的开源应用&am…...

Docker下载,包含Win、Mac

介绍 Docker 是一种开源的容器化平台&#xff0c;通过操作系统级虚拟化技术实现应用的快速开发、部署和运行。以下从多个维度对 Docker 进行详细介绍&#xff1a; 一、Docker 的核心概念与功能 容器化技术 Docker 利用 Linux 内核的容器隔离技术&#xff08;如 Cgroups 和 Nam…...

算法|2025最强优化算法

根据2025年的最新研究进展&#xff0c;以下是被广泛认可的几种“最强优化算法”&#xff0c;它们在理论创新、性能表现和应用范围上均有显著突破&#xff1a; 一、植物根茎生长优化算法&#xff08;PRGO&#xff09; 1 - 核心原理&#xff1a;灵感来源于植物根系结构&#xf…...

Prime: 1靶场渗透测试

Prime: 1 来自 <Prime: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.207 3&#xff0c;对靶机进行端口服务探测…...

html相关常用语法

html相关常用语法 HTML&#xff08;HyperText Markup Language&#xff09;即超文本标记语言&#xff0c;是用于创建网页的标准标记语言 HTML使用标记语言描述Web页面的结构 HTML元素是HTML页面的建构快 HTML元素通过标签tag来表示 HTML标签是“标题”、”段落“、”表格“等内…...

2025年R1 快开门式压力容器操作证考试题目及答案解析

R1 快开门式压力容器操作证考试题目及答案&#xff1a; 单选题 1、快开门式压力容器的快开门&#xff08;盖&#xff09;应设计安全联锁装置并应具有&#xff08; &#xff09;功能。 A. 当快开门达到预定关闭部位方能升压运行的安全联锁功能 B. 当压力容器的内部压力完全释…...

《傲慢与偏见》(Pride and Prejudice)简介

学习《傲慢与偏见》 本文缘于阅读床头灯3000词英文版《傲慢与偏见》。读完之后&#xff0c;想要了解的更深一点。 英语学习记录&#xff1a;床头灯3000词&#xff1a;《傲慢与偏见》&#xff08;Pride and Prejudice&#xff09;阅读记录 故事梗概 《傲慢与偏见》&#xff08…...

绿盟科技春招面试

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

dpkg-architecture命令详解

dpkg-architecture 是 Debian 系系统中用于处理软件包架构相关操作的工具&#xff0c;尤其在软件包构建和交叉编译环境中至关重要。以下是其核心功能及用法的详细说明&#xff1a; ‌一、核心功能‌ ‌架构查询与验证‌ 显示或验证当前系统&#xff08;DEB_HOST_ARCH&#xff…...

阿里的MNN源码如何编译成so文件,供Android调用

在Ubtuntu下面的编译&#xff0c;先整理编译环境 1、安装环境依赖 # 安装必要工具 sudo apt update sudo apt install -y cmake ninja-build git wget # 安装Android NDK&#xff08;建议使用r21版本或更高&#xff09; wget https://dl.google.com/android/repository/a…...

【高项】信息系统项目管理师(九)项目资源管理【4分】

项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程,这些过程有助于确保项目经理和项目团队在正确的时间和地点使用正确的资源。项目资源是指对于项目来说,一切具有使用价值,可为项目接受和利用,且属于项目发展过程所需的客观存在的资源,包括实物资源和团…...

hive 数据简介

Hive介绍 1&#xff09;Hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;用于结构化数据的查询、分析和汇总。Hive提供类SQL查询功能&#xff0c;它将SQL转换为MapReduce程序。 Hive不支持OLTP&#xff0c;Hive无法提供实时查询。 2&#xff09;Hive在大数据生态环境…...

SpringBoot的启动原理?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot的启动原理&#xff1f;】面试题。希望对大家有帮助&#xff1b; SpringBoot的启动原理&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…...

蓝桥杯2023年第十四届省赛真题-子矩阵

题目来自DOTCPP&#xff1a; 暴力思路&#xff08;两个测试点超时&#xff09;&#xff1a; 题目要求我们求出子矩阵的最大值和最小值的乘积&#xff0c;我们可以枚举矩阵中的所有点&#xff0c;以这个点为其子矩阵的左上顶点&#xff0c;然后判断一下能不能构成子矩阵。如果可…...