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

学习笔记第十九天

1.标准I/O的基本概念

        标准输入(stdin):默认是指键盘输入。

        标准输出(stdout):默认是指显示器输出。

        标准错误(stderr):用于输出错误信息,也是指向显示器,但与stdout不同,stderr通常是无缓冲的,以确保错误信息能立即显示。

2.标准I/O函数

标准I/O库提供了一系列函数来打开、读写和关闭文件。这些函数包括:

        打开文件:FILE *fopen(const char *path, const char *mode);

        关闭文件:int fclose(FILE *stream);

        字符读写:int fgetc(FILE *stream);

       int fputc(int char, FILE *stream);

        行读写:char *fgets(char *str, int n, FILE *stream);

      int fputs(const char *str, FILE *stream);

        块读写:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

3.缓冲机制

标准I/O库使用缓冲机制来提高效率。缓冲分为三种类型:

        全缓冲:对于文件操作,通常使用全缓冲。当缓冲区满、文件关闭或显式调用fflush时,缓

冲区内容才会被写入文件。

        行缓冲:对于标准输出(stdout)和某些特殊文件(如终端),使用行缓冲。当遇到换行符、

缓冲区满、文件关闭或显式调用fflush时,缓冲区内容会被刷新。        

        无缓冲:标准错误(stderr)通常是无缓冲的,以确保错误信息能立即显示。

4.文件操作的步骤

        打开文件:使用fopen函数打开文件,并返回一个FILE指针。

        读写文件:使用标准I/O库提供的函数进行读写操作。

        关闭文件:使用fclose函数关闭文件,并释放相关资源

5.文件打开模式

        r:只读模式。文件必须存在,否则报错。

        r+:读写模式。文件必须存在,否则报错。

        w:只写模式。文件不存在则创建,存在则清空内容。

        w+:写读模式。文件不存在则创建,存在则清空内容。

        a:追加模式。文件不存在则创建,存在则在文件末尾追加。

        a+:追加读写模式。文件不存在则创建,存在则在文件末尾追加,同时允许读取。

6.示例

while(1) 
{  fputc(fgetc(stdin), stdout);  
}

        使用EOF宏判断,但需注意EOF在C语言中通常定义为-1,但实际读取时不会直接返回-1,而

是到达文件末尾时返回EOF。

#include<stdio.h>int main(void)
{FILE* src = fopen("1.txt","r");FILE* dst = fopen("2.txt","w");if(NULL == src||NULL ==dst){printf("error1!");return 1;}while(1){int c = fgetc(src);if(EOF == c){break;}fputc(c,dst);}fclose(src);fclose(dst);return 0;
}
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{if(argc<3){printf("error1!\n");return 1; }FILE* src = fopen(argv[1],"r");FILE* dst = fopen(argv[2],"w");if(NULL == src){printf("error1!\n");return 1;}char buf[4096]= {0};while(1){memset(buf,0,sizeof(buf));if(fgets(buf,sizeof(buf),src)){int a = fputs(buf,dst);if(a == EOF){printf("error2!\n");return 1;}}else{break;}}fclose(src);fclose(dst);return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{if(argc<3){printf("error!\n");return 1; }FILE* src = fopen(argv[1],"r");FILE* dst = fopen(argv[2],"w");if(NULL == src||dst == NULL){printf("error1!\n");return 1;}char buf[2]= {0};while(1){bzero(buf,sizeof(buf));if(fread(buf,sizeof(buf),1,src)){int a = fwrite(buf,sizeof(buf),1,dst);if(a == EOF){printf("error2!\n");return 1;}}else{break;}}fclose(src);fclose(dst);return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 网络编程先验知识1
  • Flake8 和 Autopep8 使用指南
  • 用AI生成海报设计!AI绘画大模型Flux的在线使用!
  • 【NLP】文本预处理的概念、处理方法、数学公式
  • K8s集群里 中Flannel的状态显示为CrashLoopBackOff 时
  • Stable Diffusion绘画 | 提示词基础原理
  • 深度学习线性代数基础
  • 坐标变换矩阵
  • CentOS7 VMware虚拟机基于NAT配置网络IP
  • 【机器学习sklearn实战】岭回归、Lasso回归和弹性网络
  • PyCharm 2024.1 总结和最新变化
  • 大家不推荐开放式耳机?开放式耳机的优缺点
  • EasyExcel实现100w数据导入导出
  • React中,className属性自定义组件不生效的问题
  • 全面介绍 Apache Doris 数据灾备恢复机制及使用示例
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • hadoop集群管理系统搭建规划说明
  • Javascript编码规范
  • PermissionScope Swift4 兼容问题
  • Python实现BT种子转化为磁力链接【实战】
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • ViewService——一种保证客户端与服务端同步的方法
  • vue数据传递--我有特殊的实现技巧
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 服务器从安装到部署全过程(二)
  • 诡异!React stopPropagation失灵
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 数据科学 第 3 章 11 字符串处理
  • 通过git安装npm私有模块
  • linux 淘宝开源监控工具tsar
  • 关于Android全面屏虚拟导航栏的适配总结
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (阿里云万网)-域名注册购买实名流程
  • (不用互三)AI绘画工具应该如何选择
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (力扣)1314.矩阵区域和
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ../depcomp: line 571: exec: g++: not found
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net framework 4.8 开发windows系统服务
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .Net6 Api Swagger配置
  • @angular/cli项目构建--Dynamic.Form
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)