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

Linux学习记录(五)-------三类读写函数

文章目录

    • 三种读写函数
      • 1.行缓存
      • 2.无缓存
      • 3.全缓存
      • 4.fgets和fputs
      • 5.gets和puts


三种读写函数

1.行缓存

遇到新行(\n),或者写满缓存时,即调用系统函数

  • 读:fgets,gets,printf,fprintf,sprintf
  • 写:fputs,puts,scanf

2.无缓存

只要调用这个函数就会将其内容写到内核中

stderr

3.全缓存

只有写满缓存再调用系统函数

  • 读:fread
  • 写:fwrite

4.fgets和fputs

char *fgets(char *s,int size,FILE *stream);/**@param--- s            缓存,即读到哪里去*@param--- size         读多少个字节*@param--- stream       从什么地方读*@return--- 若成功则为s(缓存的地址,若处于文件尾端或出错则为null)*/int fputs(const char *s,FILE *stream);
/**param ---s             缓存,即写什么内容*param ---stream        写到什么地方去*return    若成功则为非负值,若出错则为EOF-1*///eg打开一个空文件(或不存在的文件),用fputs写入Hello world 用fgets读出该文件的内容#include <stdio.h>
int main()
{FILE *fp;char str[128] = {0};fp = fopen("a.c","w+");if(fp == NULL){fprintf(stdout,"open filed\n");return -1;}fputs("hello world",fp);rewind(fp);//调整读写位置指针函数fgets(str,128,fp);//会将新行符存入缓存之中printf("str is %s\n",str);fclose(fp);return 0;
}

在这里插入图片描述
注:

刷新缓存函数 *ffluash(FIFE fp) 把库函数中的缓存内容强制写到内核中。

调整读写位置指针函数:

**fseek()参数与lseek()**是一样的但是返回值不一样

**lseek()**的返回值是:当前文件的位置指针值;

**fseek()**的返回值是:成功返回0,失败返回-11;

*rewind(FILE fp) 用于设定流的文件位置指示为文件开始,该函数调用成功无返回值。

rewind()等价于(void)fseek(fp 0, SEEK_SET)

*ftell(FILE fp) 用于取得当前的文件位置,调用成功则为当前文件位置指示,若出错则为-1L;

5.gets和puts

char *gets(char*s);
int puts(constchar *s);

gets 与fgets的区别:

  • gets()时不能指定缓存的长度,这样就可能造成缓存越界(如若该行长于缓存长度),写到缓存之后的存储空 间中,从而产生不可预料的后果;
  • gets()只能从标准输入中读;
  • gets()与fgets()的另一个区别是:gets()并不将新行符存入缓存中, fgets 将新行符存入缓存中;

puts 与fputs的区别:

  • puts()只能向标准输出中写;
  • puts()与fputs()的另一个区别是: puts 输出时会添加一个新行符,fputs不会添加;

fprintf、printf、sprintf 行缓存的函数

*int fprintf(FILE stream,”字符串格式”)

fprintf可以输出到文件中,也可输出到显示器, printf 只能输出到显示器中。

*intsprintf(str , “字符串格式”)

输出内容到一个字符串中

//e.g.打开一个空文件,用fprintf写入Hello World,然后读出其中内容
#include <stdio.h>int main()
{FILE *fp;char str[128] = {0};fp = fopen("a.c","w+");if(fp == NULL){fprintf(stdout,"open filed\n");return -1;}fprintf(fp,"hello world");rewind(fp);fgets(str,128,fp);printf("str is %s\n",str);fclose(fp);return 0;
}

在这里插入图片描述

//将一个浮点数传化成字符串形式输出
#include <stdio.h>int main()
{float a = 1.55;char str[20] = {0};sprintf(str,"a = %.2f",a);//将a转化成字符成形式输出到str中,可用于将不同形式的内容显示到屏幕上等printf("str is %s\n",str);return 0;
}

在这里插入图片描述

一个字符读写函数fgetc和fputc

fputs有缓存,但不是行缓存

int fgetc(FILE *fp)
/**description ---- 从文件中获取一个字符*param ---- 文件描述符*return 正确为读取的字符,到文件结尾或出错时返回EOF。*/
int fputc(int c, FILE *fp)
/**description---写一个字符到文件中*param---第一个参数为要写的字符,第二个参数为文件流*return 成功则返回输入的字符,出错返回EOF。*/

练习实现cat命令

#include <stdio.h>int main(int argc,char *argv[])
{if(argc != 2)//判断参数是否正确{printf("param failed\n");return -1;}char ret;//获取读取的字符FILE *fp;fp = fopen(argv[1],"r");//打开要显示的文档if(fp == NULL){printf("open failed\n");return -2;}while(1){ret = fgetc(fp);//读/*if(ret == EOF){break;}*/if(feof(fp)){break;}fputc(ret,stdout);//写}fclose(fp);return 0;
}

在这里插入图片描述

int feof(FILE *stream);
/**功能:判断是否已经到文件结束*参数:文件流*返回值:到文件结束,返回为非0,没有则返回0*/
int ferror(FILE *stream);
/**功能:判断是否读写错误*参数:文件流*返回值:是读写错误,返回为非0,不是则返回0*/
void clearerr(FILE *stream);
/**功能:清除流错误*参数:文件流*/

相关文章:

Linux学习记录(五)-------三类读写函数

文章目录 三种读写函数1.行缓存2.无缓存3.全缓存4.fgets和fputs5.gets和puts 三种读写函数 1.行缓存 遇到新行&#xff08;\n&#xff09;,或者写满缓存时&#xff0c;即调用系统函数 读&#xff1a;fgets,gets,printf,fprintf,sprintf写&#xff1a;fputs,puts,scanf 2.无缓…...

2024年8月13日(lvs NAT脚本 RS脚本 ds脚本)

lvs-nat模式的优点配置简单,缺点是请求和响应都必须经过ds,容易称为性能瓶颈 希望有这样的模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接由rs响应给客户端 在nat模式的时候,请求vip,接收vip的响应 构想 请求vip,接受rip响应,这是不允许lvs-dr模式 NAT脚…...

css实现水滴效果图

效果图&#xff1a; <template><div style"width: 100%;height:500px;padding:20px;"><div class"water"></div></div> </template> <script> export default {data() {return {};},watch: {},created() {},me…...

接口测试面试题目,你都会了吗?

面试题 什么是接口测试&#xff1f; 接口自动化测试的流程是什么&#xff1f; GET请求和POST请求区别是什么&#xff1f; 接口测试的常用工具有哪些&#xff1f; HTTP接口的请求参数类型有哪些&#xff1f; 如何从上一个接口获取相关的响应数据传递到下一个接口&#xff1…...

jmeter-beanshell学习16-自定义函数

之前写了一个从文件获取指定数据&#xff0c;用的时候发现不太好用&#xff0c;写了一大段&#xff0c;只能取出一个数&#xff0c;再想取另一个数&#xff0c;再粘一大段。太不好看了&#xff0c;就想到了函数。查了一下确实可以写。 public int test(a,b){return ab; } ctes…...

LogicFlow工作流在React和Vue3中的使用

LogicFlow 是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制&#xff0c;方便我们快速在业务系统内满足类流程图的需求。 核心能力 可视化模型&#xff1a;通过 LogicFlow 提供的直观可视化界面&#xff0c…...

Python循环语句:不到长城心不死

Python中的循环语句是编程中非常重要的结构&#xff0c;它们允许你重复执行一段代码多次&#xff0c;直到满足某个条件为止。Python提供了两种主要的循环类型&#xff1a;for循环和while循环。 文章目录 1. for 循环2. while 循环循环控制语句range() 函数结合循环语句和 rang…...

Unity教程(九)角色攻击的改进

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…...

宠物空气净化器真的能除毛吗?有哪些选购技巧和品牌推荐修改版

夏日炎炎&#xff0c;有猫超甜。作为一名资深铲屎官&#xff0c;家里养有猫让我倍感幸福&#xff0c;夏天里有空调、有西瓜、有猫&#xff0c;这几个搭配在一起真的是超级爽。但在这么高温的夏天&#xff0c;家里养有宠物还是有不少烦恼的。比如家里的浮毛一直飘&#xff0c;似…...

Qt自定义注释

前言 是谁在Qt中编写代码&#xff0c;函数注释&#xff0c;类注释时&#xff0c;注释符号一个一个的敲&#xff1f; comment注释brief简洁的 Detailed详细的 第一步&#xff1a; 打开Qt 工具->选项->文本编辑器->片段 第二步&#xff1a; 点击添加 然后点击OK…...

【模电笔记】——信号的运算和处理电路(含电压比较器)

tips&#xff1a;本章节的笔记已经打包到word文档里啦&#xff0c;建议大家下载文章顶部资源&#xff08;有时看不到是在审核中&#xff0c;等等就能下载了。手机端下载后里面的插图可能会乱&#xff0c;建议电脑下载&#xff0c;兼容性更好且易于观看&#xff09;&#xff0c;…...

Java之 equals()与==

目录 运算符用途&#xff1a;用于比较两个引用是否指向同一个对象。比较内容&#xff1a;比较的是内存地址&#xff08;引用&#xff09;。适用范围&#xff1a;适用于基本数据类型和对象引用 equals() 方法用途&#xff1a;用于比较两个对象的内容是否相同。比较内容&#xf…...

Ubuntu20.04 运行深蓝路径规划hw1

前言 环境&#xff1a; ubuntu 20.04 &#xff1b; ROS版本&#xff1a; noetic&#xff1b; 问题 1、出现PCL报错&#xff1a;#error PCL requires C14 or above catkin_make 编译时&#xff0c;出现如下错误 解决&#xff1a; 在grid_path_searcher文件夹下面的CMakeLis…...

企业如何组建安全稳定的跨国通信网络

当企业在海外设有分公司时&#xff0c;如何建立一个安全且稳定的跨国通信网络是一个关键问题。为了确保跨国通信的安全和稳定性&#xff0c;可以考虑以下几种方案。 首先&#xff0c;可以在分公司之间搭建虚拟专用网络。虚拟专用网络通过对传输数据进行加密&#xff0c;保护通信…...

WordPress原创插件:Download-block-plugin下载按钮图标美化

WordPress原创插件&#xff1a;Download-block-plugin下载按钮图标美化 https://download.csdn.net/download/huayula/89632743...

前端【详解】缓存

HTTP 缓存 https://blog.csdn.net/weixin_41192489/article/details/136446539 CDN 缓存 CDN 全称 Content Delivery Network,即内容分发网络。 用户在浏览网站的时候&#xff0c;CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求 CDN边缘节点的缓存机制与HTTP 缓存相同…...

P5821 【LK R-03】密码串匹配

[题目通道](【L&K R-03】密码串匹配 - 洛谷) 一道神题。 如果没有修改操作&#xff0c;翻转A数组或B数组后就是裸的FFT了 如果每次操作都暴力修改FFT时间复杂度显然爆炸 如果每次操作都不修改&#xff0c;记下修改序列&#xff0c;询问时加上修改序列的贡献&#xff0c;…...

httpx,一个网络请求的 Python 新宠儿

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…...

计算机网络408考研 2014

1 计算机网络408考研2014年真题解析_哔哩哔哩_bilibili 1 111 1 11 1...

JavaScript 资源大全中文版

目录 JavaScript资源大全中文版 包管理器加载器组件管理器打包工具测试框架QA工具MVC 框架和库基于 Node 的 CMS 框架模板引擎文章和帖子数据可视化 时间轴电子表格 编辑器文档工具 文件函数式编程响应式编程数据结构日期字符串数字存储颜色国际化和本地化控制流路由安全性日志…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...