io学习----->标准io
思维导图:

一.io的作用
io是实现对文件的操作,把运行结果存到文件中,读取文件的数据,方便后期查询。
二.io的概念
io是指系统 和外部设备或用户之间的数据交互
I:input 表示数据从外部设备输入到内存中;
O:output表示数据从内存中输出到外部设备的过程。
三.io的分类
io分为文件io和标准io;
标准io:指程序和用户之间的数据交互,标准io=文件io+缓冲区
文件io:指程序和系统之间的数据交互
四.文件io和标准io的区别
标准io:
- 满足ANS的标准,当编译程序后,可以在不同的编译环境下执行
- 存在缓冲区,加快访问速度
- 可移植性强,可以在不同的编译环境下执行
- 属于库函数调用,只可以访问普通文件
- 标准io操作文件时需要依赖于流指针(FILE*)
文件io
- 满足POIX标准,只可以在unix操作系统中使用
- 不存在缓冲区,访问速度慢
- 不可移植,系统调用,依赖系统
- 属于系统函数调用,可以访问特殊文件(连接文件,设备文件,管道文件)
- 文件io操作系统时需要依赖文件描述符
五.标准io函数
1.流和流指针
-
流:数据一个一个移入或移出缓冲区的过程,称为字节流
-
流指针FILE*: 本质FILE是一个结构体的别名,当存储./a.out的运行结果,需要创建一个文件,每常见一个文件则会在用户空间申请一片缓冲区。缓冲区存在一些信息(缓冲区的首地址,缓冲区的结束地址等)存在流指针
-
注意FILE默认已经存在的,程序员直接使用即可
2.查看流指针
- 1.查看数据类型 vi -t 类型 ----》vi -t FILE
- 2.追代码 ctrl ] (右中括号)
- 3.返回 ctrl t
3.标准io函数
-
1.fopen-------->文件操作:打开,读取,写入,关闭。
r 以读的方式打开文件,流指针指向文件的起始地址,如果文件存在则打开成功,不存在则打开失败
r+ 以读写的方式打开文件. ,流指针指向文件的起始地址,如果文件存在则打开成功,不存在则打开失败
w 以写的方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件
w+ 以读写的方式打开文件,如果文件不存在则创建文件,如果文件存在则清空文件
a 以追加的方式打开文件(写入到文件的结尾)如果文件不存在则创建文件,如果文件存在则流指针指向文件的结尾
a+ 以读写(追加)的方式打开文件(写入到文件的结尾)如果文件不存在则创建文件,如果文件存在则流指针指向文件的结尾
-
2.strerror\perror---------功能:根据错误码,返回一个错误码对应的信息
streeor只返回错误信息,没有详细信息,perror 返回错误信息的同时会给一个提示语句
perror截图:
3.fgetc\fputc
fputc:输出的函数,对于文件,就是写入的意思
fgetc:输入的函数,对于文件,读取的意思


4.fclose
功能:关闭文件

5.fseek\rewind\ftell
fseek:功能:设置指针的偏移量(设置光标的位置)
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
参数:
stream: 流指针,就是fopen的fp
offset: 指针的偏移量,
如果offset>0 ,指针向后偏移
如果offset<0 指针向前偏移
offset=0 指针不偏移
whence:
SEEK_SET 把光标设置在起始位置
SEEK_CUR 把光标设置在当前位置
SEEK_END 把光标设置在结尾位置
rewind:把光标设置在起始位置
void rewind(FILE *stream);
ftell:获取当前指针到起始地址之间的文件大小
1.把光标设置在文件的结尾 fseek(fp,0,SEEK_END);
2.获取文件大小 long size=ftell(fp)


6.fputs\fgets
fputs:功能:从文件流指针中写入字符串
格式: int fputs(const char *s, FILE *stream);

fgets:功能:从文件流指针中读取字符串
格式: char *fgets(char *s, int size, FILE *stream);
size: 只可以获取小于size个字符,最多存储size-1

六、练习
- 使用标准IO函数,实现文件的拷贝
#include <head1.h>int main(int argc, const char *argv[]){FILE *fp=fopen("IO.text","r");if(NULL==fp){PRINT_ERROR("fopen");}FILE* fp1=fopen("IO.1text","w");//读取文件,然后写入while(1 ){char ch=(fgetc(fp));if(EOF==ch){break;}fputc(ch,fp1);}fclose(fp); fclose(fp1); return 0;} -
使用fgets函数,打印一个文件,类似cat
#include <head1.h>2 int main(int argc, const char *argv[])3 {4 //打开文件5 FILE* fp=fopen("./IO.1text","r");6 if(NULL==fp)7 {8 PRINT_ERROR("fopen");9 }10 11 //读取数据12 while(1)13 { 14 int res=fgetc(fp);15 if(EOF==res)16 {17 // printf("读取失败");18 // return -1;19 break;20 } 21 printf("%c",res);22 } 23 /* int res;24 while((res=fgetc(fp)) != EOF)25 {26 printf("%c",res);27 } 28 */ 29 //关闭文件30 if(fclose(fp)==EOF)31 PRINT_ERROR("fopen");32 33 return 0;34 } -
计算文件的行数
#include <head1.h>
int main(int argc, const char *argv[])
{//打开文件FILE* fp=fopen("IO.text","r+");if(NULL==fp){ PRINT_ERROR("fopen error");}int count=0;//循环读取,遇到回车计算行数while(1){ char ch =fgetc(fp);if(ch==EOF){break;}if(ch==10){count++;}}printf("这个文件有%d行\n",count);fclose(fp);return 0;
}
相关文章:
io学习----->标准io
思维导图: 一.io的作用 io是实现对文件的操作,把运行结果存到文件中,读取文件的数据,方便后期查询。 二.io的概念 io是指系统 和外部设备或用户之间的数据交互 I:input 表示数据从外部设备输入到内存中; O:output…...
go语言中字符串嵌套
在Go语言中,字符串嵌套通常是指在字符串中包含另一个字符串。可以通过以下几种方式实现: 1. 使用双引号和转义字符 如果需要在字符串中嵌套双引号,可以使用转义字符 \ 来表示内部的双引号。例如: s : "He said, \"He…...
2024-2025学年职业院校技能大赛“大数据应用开发”赛项竞赛样题-解析
2025年职业院校技术大赛-高职大数据应用开发赛项专题。 2024-2025学年广东省职业院校技能大赛“大数据应用开发”赛项竞赛样题1-任务B:离线数据处理_解析2024-2025学年广东省职业院校技能大赛“大数据应用开发”赛项竞赛样题2-任务B:离线数据处理_解析2…...
LeetCode 面试题 17.19. 消失的两个数字
LeetCode 面试题 17.19. 消失的两个数字 思路🧐: 运用位运算,我们先创建一个变量tmp,依次异或nums和1~N所有整数,此时就可以得到两个数的异或值。 然后通过右移操作,逐位检查tmp中的每一位,找到…...
KaiwuDB| Google Spanner 经典架构回顾
前言 大数据时代 ,随着移动互联网和物联网技术的发展 , 全球数据量呈现爆发式增长,已经远远超出集中式单机数据库的处理能力。CCF 数据库专委 2021 年发布的《“十四五”数据库发展趋势与挑战》显示, 各行各业海量数据的管理需求…...
拼电商客户管理系统
内容来自:尚硅谷 难度:easy 目 标 l 模拟实现一个基于文本界面的 《 拼电商客户管理系统 》 l 进一步掌握编程技巧和调试技巧,熟悉面向对象编程 l 主要涉及以下知识点: 类结构的使用:属性、方法及构造器 对象的创建与…...
Electron、Tauri及其它跨平台方案终极对比
Electron、Tauri及跨平台方案终极对比(2025版) 一、核心框架深度解析 1.1 Electron:Web技术的桌面霸主 技术架构 基于Chromium(浏览器内核) Node.js(后端运行时)的双进程架构,支持…...
WireGuard搭建网络,供整个公司使用
一、清理现有配置(如已有失败尝试) # 停止并删除现有 WireGuard 接口 sudo wg-quick down wg0 sudo rm -rf /etc/wireguard/wg0.conf# 验证接口已删除 (执行后应该看不到 wg0) ifconfig二、服务器端完整配置流程 1. 安装 WireGuard sudo apt update &…...
项目准备(flask+pyhon+MachineLearning)- 1
目录 这是一篇学习笔记 1. 搭建项目 2.前期准备工作 3.创建用户(user)模板 这是一篇学习笔记 目的:用flask快速实现发布有关机器学习的项目,掌握flask框架,机器学习模型的存储和调用。 1. 搭建项目 使用pycharm创建项目,fl…...
1.2.2 使用Maven方式构建Spring Boot项目
本次实战通过Maven方式构建了一个Spring Boot项目,实现了简单的Web应用。首先,创建了Maven项目并设置好项目名称、位置、构建系统和JDK等。接着,添加了Spring Boot的父项目依赖和web、thymeleaf起步依赖。然后,创建了项目启动类He…...
C++中函数的调用
************* C topic:call functions ************* 1、为什么要用函数 In every codes, functions are the crucial parts. There are many advantages of the functions. But I introduce two of them. The first usage of the functions is reuse. And th…...
【入门Web安全之前端学习的侧重点和针对性的建议】
入门Web安全之前端学习的侧重点和针对性的建议 一、HTML:理解攻击载荷的载体二、CSS:次要但需警惕点击劫持三、JavaScript:渗透测试的核心重点四、浏览器工具:渗透测试的实战武器五、学习建议与资源六、总结:渗透测试者…...
【Linux】之【Bug】VMware 虚拟机开机 一直卡在黑屏左上角下划线闪烁界面
解决 参考: 解决Ubuntu20.04 开机黑屏光标闪烁进不去系统 Centos根目录100%解决思路 当前界面 ctrlaltf3-f6 暂时进入终端界面 df -h 查看发现根目录 磁盘空间已满 执行命令 查看当前目录占用内存明细 sudo du -h -x --max-depth1清理无用的大内存文件 或者安装…...
RT-DETR融合YOLOv12中的R-ELAN结构
RT-DETR使用教程: RT-DETR使用教程 RT-DETR改进汇总贴:RT-DETR更新汇总贴 《YOLOv12: Attention-Centric Real-Time Object Detectors》 一、 模块介绍 论文链接:https://arxiv.org/abs/2502.12524 代码链接:https://gitcode.com…...
【前端基础】Day 8 H5C3提高
目录 1. HTML5新特性 1.1 新增语义化标签 1.2 新增多媒体标签 1.3 新增input类型 1.4 新增表单属性 2. CSS3的新特性 2.1 新增选择器 2.1.1 属性选择器 2.1.2 结构伪类选择器 2.1.3 伪元素选择器(重点) 2.2 CSS3盒子模型 2.3 CSS3其他特性&a…...
NL2SQL-基于Dify+阿里通义千问大模型,实现自然语音自动生产SQL语句
本文基于Dify阿里通义千问大模型,实现自然语音自动生产SQL语句功能,话不多说直接上效果图 我们可以试着问他几个问题 查询每个部门的员工数量SELECT d.dept_name, COUNT(e.emp_no) AS employee_count FROM employees e JOIN dept_emp de ON e.emp_no d…...
Java 9 到 Java 21 新特性全解析:从语法简化到API增强
一、新特性的概述 纵观Java这几年的版本变化,在Java被收入Oracle之后,Java以小步快跑的迭代方式,在功能更新上迈出了更加轻快的步伐。基于时间发布的版本,可以让Java研发团队及时获得开发人员的反馈,因此可以看到最近…...
蓝桥杯2024年真题java B组 【H.拼十字】
蓝桥杯2024年真题java B组 【H.拼十字】 原题链接:拼十字 思路: 使用树状数组或线段树解决。 先将输入的信息存入到一个n行3列的数组中,将信息排序,按照长度小到大,长相同时,宽度小到大 排序。 建立三个…...
skia的学习与研究
最近再研究skia,特地发一篇文章来记录一下。Skia版本更新非常频繁,大概每四周就会创建一个新版本,此版本持续维护六周左右就会被标记为稳定分支; skia三套渲染: 无gpu硬件如嵌入式设备,使用CPU渲染,使用…...
T-SQL 语言基础: SQL 数据库对象元数据及配置信息获取
目录 介绍目录视图 获取表和架构名称获取列信息 信息架构视图 获取表信息获取列信息 系统存储过程和函数 获取对象列表获取对象详细信息获取约束信息获取数据库属性信息 总结引用 介绍 在 SQL 数据库管理中,获取数据库对象的元数据信息是至关重要的。元数据提供了…...
网络编程 day01
网络编程 day01 0. 网络编程课程介绍1. 认识网络1.网络发展史2.局域网与广域网局域网(LAN)广域网(Wan) 3.光猫4.路由器5.交换机与路由器6.网线 2. IP1. 基本概念2. 网络号/主机号(二级划分)3. IP地址分类整…...
Tomcat 8 安装包下载
Tomcat 8 安装包下载 【下载地址】Tomcat8安装包下载 本仓库提供了一个包含 Windows 和 Linux 版本的 Tomcat 8 安装包,方便用户快速下载并部署 Tomcat 8 服务器 [这里是图片001] 项目地址: https://gitcode.com/open-source-toolkit/fda7c 简介 本仓库提供了一个…...
java 与 c++在遍历 map 数据结构上的一些差异
在编写动态规划时,发现了一个现象: C 中的 unordered_map 和 map 可以一边遍历一边添加数据Java 中的 HashMap 却不能,Java 只能通过 ConcurrentSkipListMap 实现在遍历中添加数据。 问了 grok,原来是两个编程语言在 map 数据结…...
vscode通过ssh远程连接(linux系统)不能跳转问题
1.问题描述 unbantu中的vscode能够通过函数跳转到函数定义,而windows通过ssh连接unbantu的vscode却无法跳转 2.原因: 主要原因是这里缺少插件,这里是unbantu给主机的服务器,与ubantu本地vscode插件相互独立,能否跳转…...
unity pico开发 五 UI交互
文章目录 添加画布添加交互组件取消传送射线对UI的控制解决按扳机键会传送的冲突按下按键呼出菜单,并让菜单出现在头的前方 添加画布 创建一个新画布,添加一个Button,将画布改为world space,然后缩放改为0.001,调整到…...
软开经验总结
文章目录 软开经验总结一、二次开发时候操作步骤二、logger的作用!!!三、git使用 软开经验总结 一、二次开发时候操作步骤 改 SDK 和 language level改 maven 配置改数据库 注意Mysql 版本 差别是否过大!!࿰…...
攻克 FBX 转 STL 难题,迪威模型网搭建通途
在 3D 内容创作与 3D 打印的广袤天地中,不同的文件格式宛如一道道独特的密码,各自守护着特定的 3D 世界。今天,我们聚焦于 FBX 与 STL 这两种格式,以及如何借助迪威模型网实现 FBX 到 STL 的无缝转换。 FBX 与 STL:…...
QT 中的元对象系统(三):QObject深入理解
目录 1.简介 2.特性 2.1.对象树与内存管理 2.2.信号与槽机制 2.3.事件处理 2.4.属性系统 2.4.1.Q_PROPERTY配置的属性 2.4.2.动态属性 2.4.3.实现原理 2.5.国际化支持 2.6. 定时器支持 3.类设计(q和d指针) 4.总结 1.简介 QObject这个 class 是 QT 对象模型的核心&…...
二、QT和驱动模块实现智能家居-----问题汇总1
1、文件地址改变后必须在QT下更改地址 2、指定了QT内Kits下的Sysroot头文件地址,但是还是找不到头文件: 3、提示无法执行QT程序:先干掉之前的QT程序 ps //查看程序PIDkill -9 PID 4、无法执行QT程序 1)未设置环境变量 …...
Golang的数据库分库分表
# Golang的数据库分库分表 什么是数据库分库分表 数据库分库分表是指将单一的数据库拆分成多个库,每个库中包含多张表,以提高数据库的性能和可伸缩性。通常在大型应用中,单一的数据库往往无法满足高并发和海量数据的需求,因此需要…...
