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

【文件IO和部分标准IO】输入输出缓冲区和报错

1> 使用fread、fwrite实现两个文件的拷贝

#include <myhead.h>
int main(int argc, const char *argv[])
{FILE *fp1=NULL;FILE *fp2=NULL;if((fp1=fopen("./01test.txt","r+"))==NULL){printf("打开文件失败\n");return -1;}if((fp2=fopen("./02test.txt","w"))==NULL){printf("打开文件失败\n");return -1;}int res;char buf[128]="";while(1){res=fread(buf,1,sizeof(buf),fp1);if(res<128){if(feof(fp1)){fwrite(buf,1,res,fp2);break;}if(ferror(fp1)){printf("fread操作失败\n");return -1;}}fwrite(buf,1,res,fp2);}fclose(fp1);fclose(fp2);return 0;
}

2> 使用fread、fwrite实现将一个文件中的所有数字写入到另一个新文件中

#include <myhead.h>
int main(int argc, const char *argv[])
{FILE *fp1=NULL;FILE *fp2=NULL;if((fp1=fopen("./01test.txt","r+"))==NULL){printf("打开文件失败\n");return -1;}if((fp2=fopen("./02test.txt","w"))==NULL){printf("打开文件失败\n");return -1;}int res,i=0;char sbuf[128]="";char buf;while(1){res=fread(&buf,1,sizeof(buf),fp1);if(res<1){if(feof(fp1)){break;}if(ferror(fp1)){printf("fread操作失败\n");return -1;}}if(buf>='0'&&buf<='9'){	sbuf[i]=buf;i++;}}fwrite(sbuf,1,i+1,fp2);fclose(fp1);fclose(fp2);return 0;
}

3> 使用文件IO完成两个文件的拷贝

#include <myhead.h>
int main(int argc, const char *argv[])
{int fd1=-1;int fd2=-1;if((fd1=open("./t1.txt",O_RDWR))==-1)//r+{perror("open fd1 error");return -1;}if((fd2=open("./t2.txt",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1)//w{perror("open fd2 error");return -1;}//fd1=3,fd2=4printf("fd1=%d,fd2=%d\n",fd1,fd2);char buf[128]="";int res;while(1){res=read(3,buf,sizeof(buf));if(res==0){break;}write(fd2,buf,res);}return 0;
}

4> 将课堂代码重新实现遍

5> 思维导图

6> 标准IO和文件IO的区别与联系

函数不同,缓冲方式不同。联系:都是输入输出。

区别(不同点)

1. 操作对象不同

  • 标准IO:操作的是标准流(stdin键盘输入、stdout屏幕输出、stderr错误输出)

  • 文件IO:操作的是磁盘上的实际文件

2. 函数不同

  • 标准IO:用 printf()scanf()getchar()puts() 

  • 文件IO:用 fopen()fclose()fread()fwrite() 

3. 缓冲方式不同

  • 标准IO:有缓冲区(数据先放缓冲区,满了再处理),效率高

  • 文件IO:可以选缓冲方式,也可以直接操作(更底层)

4. 使用场景不同

  • 标准IO:适合人机交互(输入输出简单数据)

  • 文件IO:适合处理大文件、数据存储

联系(相同点)

1. 都是输入输出

  • 都是用来处理数据的输入和输出

  • 本质上都是数据流动

2. 底层都是系统调用

  • 最终都要通过操作系统来真正读写数据

7> 牛客网刷题>=26

http://www.xdnf.cn/news/1425565.html

相关文章:

  • 信创之-麒麟v10服务器安装tengine(已完成)
  • 005 从会议全貌到模型本质:会议介绍与语言模型概述的深度融合
  • 电源相关零碎知识总结
  • 深度学习——速问速答
  • shell脚本函数介绍
  • http缓存
  • LobeChat知识库,小团队的选择,理解Embedding与向量数据库的关系
  • 解决Content Security Policy (CSP)问题
  • Java类加载机制
  • 软件使用教程(四):Jupyter Notebook 终极使用指南
  • 【iOS】关键字复习
  • javaScript变量命名规则
  • MySQL基础知识保姆级教程(四)视图与约束
  • Chrome 如何清除浏览器缓存
  • 【开题答辩全过程】以 基于SpringBoot的校园一卡通管理系统的设计与实现为例,包含答辩的问题和答案
  • ESP32驱动数字麦克风INMP441
  • A2A + MCP 的python实现的最小可运行骨架
  • Jmeter实现参数化的4种方式
  • 构建AI智能体:二十、妙笔生花:Gradio集成DashScope Qwen-Image模型实现文生图
  • 人脸识别备案的重要意义
  • ES6新特性:JavaScript的进化装备箱[特殊字符]
  • 记一次使用函数式接口
  • A股大盘数据-20250901 分析
  • GD32入门到实战25--独立看门狗
  • JAVA后端开发——MyBatis 结合 MySQL JSON 类型查询详解
  • 【STM32】贪吃蛇 [阶段 3] 增强模块结构(架构优化)
  • curl 介绍及使用教程
  • python爬虫之selenium库进阶(小白五分钟从入门到精通)
  • 基本渗透概念
  • Raft 协议在 Nacos 中的实现