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

IO编程相关知识

一.IO概念

1.一切皆是文件

1)b:

block,块设备文件,按快扫描信息的文件,磁盘

按快扫描设备信息

2)c:

character,字符设备文件,屏幕、键盘、鼠标

按字符扫描设备信息

3)d:

directory,目录文件

存放文件信息的文件夹

4)-:

普通文件,存放信息

5)l:

link,链接文件

将一个文件链接到另一个文件

6)s:

socket,套接字文件

进程间通信

7)p:

pipe,管道文件

进程间通信

2.IO的操作对象是文件

3.IO的接口分类:

1).普通文件:标准IO

  • 有缓存的IO

2).设备文件、通信文件:文件IO

  • 没有缓存的IO

3).目录文件:目录IO

二.标准IO

1.标准IO头文件

#include<stdio.h>

2.接口:

  • fopen \ fclose
  • fgetc \ fputc
  • fgets \ fputs
  • fscanf \ fprintf
  • fread \ fwrite
  • fseek \ rewind \ ftell

3.普通文件

ASKII码文件:文件中存放的内容均为能够在终端显示的ASKII码字符

  • 代码、文本文件

二进制文件:存放二进制数据的文件

  • 音视频、图片、压缩包

注意:ASKII码文件是一种特殊的二进制文件

4.文件操作

1).打开文件 fopen

2).读写文件

3).关闭文件 fclose

5.默认打开的流

  • stdin 标准输入流 scanf、getchar、gets
  • stdout 标准输出流 printf、putchar、puts
  • stderr 标准错误流 perror

6.缓存类型

1).全缓存:4096(4K)

  • 缓存区满刷新缓存区
  • 刷新条件:
    • 缓存区满刷新
    • 程序结束或是fclose刷新
    • 使用fflush强制刷新

2).行缓存:1024(4K)

  • 遇到\n刷新缓存区
  • 刷新条件:
    • 缓存区满刷新
    • 程序结束或是fclose刷新
    • 使用fflush强制刷新
    • 遇到\n刷新
  • 与终端建立的缓存都是行缓存
  • stdin、stdout

3).不缓存:OK

  • 无缓存区,直接刷新
  • 用于错误处理或者人机交互
  • stderr

7.函数接口

1).fopen

原型:FILE *fopen(const char *pathname, const char *mode);

功能:打开文件并于文件建立流

参数:

pathname:打开文件的路径
mode:打开的方式

r: 只读 文件不存在 报错
文件存在 只读打开
r+:读写 文件不存在 报错
文件存在 读写打开
w:只写 文件不存在 创建
文件存在 清0只写打开
w+:写读 文件不存在 创建
文件存在 清0写读打开
a: 追加只写 文件不存不存在 创建
文件存在 追加只写打开
a+:追加读写 文件不存在创建
文件存在 追加读写打开

返回值:

成功返回建立的流的空间的首地址

失败返回NULL

2).fclose

原型:int fclose(FILE *stream);

功能:关闭流

参数:

stream:文件流指针

返回值:

成功返回0

失败返回EOF(-1)

3).fputc

原型:int fputc(int c, FILE *stream);

功能:向流中写入一个字符

参数:

stream:文件流指针

c:要写入的字符的ASKII码值

返回值:

成功返回写入字符的ASKII码值

失败返回EFO

4).fgetc

原型:int fgetc(FILE *stream);

功能:从流中读取下一个字符

参数:

stream:文件流指针

返回值:

成功返回读到字符的ASKII码值

失败或者读到文件末尾返回EFO

  • ch = getchar() 等价于 ch = fgetc(stdin)
  • putchar(ch) 等价于 fputc(ch, stdout)

5).fputs

原型:int fputs(const char *s, FILE *stream);

功能:向流中写入一串字符

参数:

s:字符串的首地址

stream:文件流指针

返回值:

成功返回负数

失败返回EFO

6).fgets

原型:char *fgets(char *s, int size, FILE *stream);

功能:从流中接收一串字符,字符长度大于0或小于size,遇到\n或EFO返回

参数:

s:存放字符串空间的首地址

size:最多读取字符个数

stream:文件流指针

返回值:

成功返回存放字符串空间的首地址

失败或者读到文件末尾返回NULL

  • gets和gets不完全等价
    • gets去掉从终端接收的\n
    • fgets不会去掉从终端接收的\n
  • 如果想用fgets实现gets功能,参考如下形式:

fgets(str, sizeof(str), stdin);
str[strlen(str)-1] = '\0';

  • puts和puts不完全等价
    • puts会多打印\n
    • fputs不会多打印\n

7).fprintf

原型:int fprintf(FILE *stream, const char *format, ...);

功能:向流中写入格式化的字符串

参数:

stream:文件流指针

format:字符串首地址

...

返回值:

成功返回打印的字符个数

失败返回负数

8).fscanf

原型:int fscanf(FILE *stream, const char *format, ...);

功能:从流中读取格式化的字符串

参数:

stream:文件流指针

format:接受字符串的形式、字符串首地址

返回值:

成功返回匹配项的个数

失败或者读到文件末尾返回EFO

http://www.jsqmd.com/news/351210/

相关文章:

  • 2026同安装修公司怎么选?实测口碑榜+避坑指南,业主直接抄作业 - 品牌测评鉴赏家
  • 2026湖里装修公司怎么选?博主实测3家宝藏装企+避坑指南,抄作业就行! - 品牌测评鉴赏家
  • 采用 TitanIDE 3.0 开展团队级 AI-Coding 优势分析
  • 什么是银联 ACS 入金
  • ESXi6.7新版集成网卡驱动镜像分享(含Realtek(瑞昱)RTL螃蟹网卡)|附ESXi6.0安装教程、集成驱动教程及常见问题解答
  • 思明装修别踩坑!3家口碑实力派公司推荐,性价比+颜值双在线 - 品牌测评鉴赏家
  • Python毕设项目:python基于协同过滤算法的理财产品推荐系统(源码+文档,讲解、调试运行,定制等)
  • 儿童补钙牛奶推荐:旺旺低脂高钙牛乳,用营养助力孩子健康成长 - Top品牌推荐
  • 海沧装修公司怎么选?实测宝藏品牌+避坑指南,2026抄作业版 - 品牌测评鉴赏家
  • 集美装修公司哪家强?实测口碑王+避坑指南,装房不踩雷! - 品牌测评鉴赏家
  • CANN 神经网络算子库深度解析与实践指南
  • 换根DP
  • 2/6
  • 【毕业设计】python基于协同过滤算法的理财产品推荐系统(源码+文档+远程调试,全bao定制等)
  • Qt 6.10.1 安装与 Android 配置_桌面 _真机 _虚拟机完整流程(保姆级教程)(上)
  • PyPTO:面向NPU的高效并行张量编程范式
  • 翔安装修公司哪家强?3家本土口碑王实测推荐 避坑指南+报价全公开 - 品牌测评鉴赏家
  • 四卡T10(Turing, SM75)使用vLLM部署Qwen3-Next-80B-A3B-Thinking-AWQ-4bit模型
  • Quest 2 各种联网问题解决记录
  • 集成灶用久了油污难清理怎么办?告别烦恼!自清洁集成灶选购攻略在此 - 匠言榜单
  • 先验和后验
  • 06
  • 2026厦门海沧装修公司哪家强?口碑榜单+避坑攻略,装修小白秒懂! - 品牌测评鉴赏家
  • 同安宝藏装修公司大揭秘!看完再装不踩坑 - 品牌测评鉴赏家
  • 16 Electron 应用自动更新方案:electron-updater 完整指南 - 详解
  • 【计算机毕业设计案例】-基于Python的招聘岗位就业可视化系统基于Python的就业网站可视化系统设计与实现(程序+文档+讲解+定制)
  • ROCm rocr-libhsakmt分析系列4: HsaMemFlags分析
  • CANN推理优化实战:cann-recipes-infer项目详解
  • 2026厦门湖里装修公司怎么选?避坑攻略,刚需/改善党必看 - 品牌测评鉴赏家
  • Python毕设项目推荐-基于Python大数据的就业网站可视化系统设计与实现基于Python的就业网站可视化系统设计与实现【附源码+文档,调试定制服务】