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

1.文件 标准IO库

1.文件 标准IO库

      • **1. 标准I/O库概述**
      • **2. 文件的概念与类型**
      • **3. 标准I/O库的函数分类**
      • **4. 缓冲机制**
      • **5. 文件操作步骤**
      • **6. 文件定位**
      • **7. 常见函数详解**
      • **8. 练习与作业**
      • **9. 其他注意事项**
      • **10. 总结**


1. 标准I/O库概述

  • 标准I/O库:由Dennis Ritchie在1975年设计,是C语言标准库的一部分,提供了一组用于文件操作的函数。
  • 头文件stdio.h,位于/usr/include/stdio.h
  • 标准输入输出设备
    • 标准输入(stdin):默认是键盘(/dev/input)。
    • 标准输出(stdout):默认是显示器。
  • 文件操作:在Linux中,I/O操作都是对文件的操作,标准I/O库是对文件I/O的封装,提供了缓冲机制,减少系统调用的开销。

2. 文件的概念与类型

  • 文件的作用:用于存储数据(数据和指令)。
  • Linux中的文件类型
    • d:目录
    • -:普通文件
    • l:符号链接
    • p:管道
    • s:套接字
    • c:字符设备文件
    • b:块设备文件

3. 标准I/O库的函数分类

  • 文件操作函数
    • fopen:打开文件
    • fclose:关闭文件
  • 字符操作函数
    • fgetc:从文件中读取一个字符
    • fputc:向文件中写入一个字符
  • 行操作函数
    • fgets:从文件中读取一行
    • fputs:向文件中写入一行
  • 块操作函数
    • fread:从文件中读取一块数据
    • fwrite:向文件中写入一块数据
  • 文件定位函数
    • fseek:移动文件指针
    • ftell:获取当前文件指针的位置
    • rewind:将文件指针重置到文件开头

4. 缓冲机制

  • 行缓冲
    • 缓冲区大小:1KB
    • 刷新条件:
      • 遇到\n
      • 缓冲区满
      • 程序结束
      • 调用fflush(stdout)
    • 主要用于终端交互(如stdout)。
  • 全缓冲
    • 缓冲区大小:4KB
    • 刷新条件:
      • 缓冲区满
      • 程序结束
      • 调用fflush(fp)
    • 主要用于文件读写。
  • 无缓冲
    • 缓冲区大小:0KB
    • 数据直接刷新,不经过缓冲区。
    • 主要用于错误信息输出(如stderr)。

5. 文件操作步骤

  1. 打开文件:使用fopen函数,返回一个FILE*指针。
  2. 读写操作
    • 使用fgetcfputcfgetsfputsfreadfwrite等函数进行读写。
  3. 关闭文件:使用fclose函数关闭文件。

6. 文件定位

  • fseek
    • 功能:移动文件指针。
    • 参数:
      • stream:文件流指针。
      • offset:偏移量(正数向文件末尾偏移,负数向文件开头偏移)。
      • whence:起始位置(SEEK_SETSEEK_CURSEEK_END)。
  • ftell
    • 功能:获取当前文件指针的位置。
  • rewind
    • 功能:将文件指针重置到文件开头。

7. 常见函数详解

  • fopen
    • 模式:
      • r:只读
      • r+:读写
      • w:只写(文件不存在则创建,存在则清空)
      • w+:写读(文件不存在则创建,存在则清空)
      • a:追加写(文件不存在则创建,存在则追加)
      • a+:追加读写(文件不存在则创建,存在则追加)
  • fgetc/fputc
    • fgetc:从文件中读取一个字符。
    • fputc:向文件中写入一个字符。
  • fgets/fputs
    • fgets:从文件中读取一行。
    • fputs:向文件中写入一行。
  • fread/fwrite
    • fread:从文件中读取一块数据。
    • fwrite:向文件中写入一块数据。

8. 练习与作业

  • 练习1:使用fgetcfputc实现类似cat命令的功能。
  • 练习2:使用fgetcfputc实现文件拷贝功能。
  • 练习3:使用fgetsfputs实现用户输入并显示输出,输入quit时程序结束。
  • 作业1:使用freadfwrite实现文件拷贝功能。
  • 作业2:统计文本文件中a-z字母出现的次数。

9. 其他注意事项

  • 文件结束判断
    • 使用EOF宏或feof函数判断文件是否结束。
    • feof函数需要在一次I/O操作后调用。
  • 错误处理
    • 使用ferror检测流是否出错。
    • 使用clearerr清除错误标记。

10. 总结

标准I/O库提供了丰富的函数用于文件操作,理解缓冲机制、文件定位、文件类型等概念对于高效使用这些函数至关重要。通过练习和作业,可以加深对标准I/O库的理解和应用。


http://www.kler.cn/a/526074.html

相关文章:

  • 在Putty创建php文件
  • 基于Django的个人博客系统的设计与实现
  • AI编译器之——为什么大模型需要Relax?
  • web集群
  • 基于 AWS SageMaker 对 DeepSeek-R1-Distilled-Llama-8B 模型的精调与实践
  • 小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)
  • JxBrowser 8.2.2 版本发布啦!
  • momask-codes 部署踩坑笔记
  • 列表(列表是什么)
  • 【Qt】信号和槽简介
  • vue相关的页面和js编写
  • Fork/Join框架_任务分解与并行执行
  • 智慧园区管理平台实现智能整合提升企业运营模式与管理效率
  • 记录一次Sqoop从MySQL导入数据到Hive问题的排查经过
  • 使用Swiper构建运营推荐位
  • 【蓝桥杯省赛真题02】C++猫吃鱼 第十届蓝桥杯青少年创意编程大赛 算法思维 C++编程省赛真题解
  • JAVASE入门十二脚-file,IO流
  • 【DeepSeek-V3】AI Model Evaluation Framework and index schedule AI模型能力评价指标及对比
  • 395. 至少有K个重复字符的最长子串
  • continuous batching、chunked-prefill相关概念
  • springboot3 集成 knife4j(接口文档)
  • 【前端学习路线】前端工程化 详细知识点学习路径(附学习资源)
  • 【 CVE-2025-21298】 通过ghidriff查看完整补丁差异
  • 使用SearchCursor检索要素类中的要素
  • 【深度分析】DeepSeek大模型技术解析:从架构到应用的全面探索
  • Go语言编程基础