news 2026/4/28 2:46:06

IO编程相关知识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 7:17:54

化学镀银工艺:沉积动力学原理与在陶瓷基板应用中的厚度均匀性挑

引言化学镀银工艺在电子电镀与表面处理领域有着广泛应用。随着电子设备小型化和高性能化的发展趋势&#xff0c;对银镀层的性能和质量要求也日益提高。AG - 600B 化学镀银 - 快速作为一款具有特定性能的产品&#xff0c;其相关技术值得深入分析探讨。技术原理化学镀银过程是基于…

作者头像 李华
网站建设 2026/4/25 8:55:54

超越营销:招商的“家宴”,为何是品牌软实力的终极体现?

当几乎所有开发商都在营销战场上绞尽脑汁——比拼渠道、争夺流量、包装概念时&#xff0c;招商蛇口却似乎找到了一条“以柔克刚”的路径。它没有加入喧嚣的声量竞赛&#xff0c;而是年复一年、社区复社区地&#xff0c;操办着一场场看似“传统”甚至“老派”的家宴。从已交付社…

作者头像 李华
网站建设 2026/4/25 8:54:18

java+vue基于springboot的基于微信小程序的电子元器件商城_ta677h1g

目录基于SpringBoot和Vue的微信小程序电子元器件商城技术架构核心功能优势与特点开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于SpringBoot和Vue的微信小程序电子元器件商城 该系统结合SpringBoot后端框架与Vue前端技术&a…

作者头像 李华
网站建设 2026/4/25 11:59:26

【AI就业干货27】NLP工程实战:类别不平衡与长文本处理的高效解决方案

NLP工程实战:类别不平衡与长文本处理的高效解决方案 本文深入解析NLP工程中的两大经典难题——类别不平衡与序列长度限制,系统梳理SMOTE、Focal Loss、Longformer、Reformer等核心Trick的原理与实现,助力工程师在真实场景中提升模型鲁棒性与泛化能力。 一、引言:为什么需要…

作者头像 李华
网站建设 2026/4/26 23:06:55

《CF960F Pathwalks》

题目描述 给定 n 个点 m 条边的有向图&#xff0c;可能不连通&#xff0c;可能有重边&#xff0c;也可能会有自环。求最长的路径(可以经过重复节点)&#xff0c;使得这条路径的编号和权值都严格单调递增&#xff0c;其中编号指输入的顺序。路径的长度是指经过边的数量。 输入…

作者头像 李华