news 2026/4/16 14:27:39

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/16 12:46:42

化学镀银添加剂:添加剂成分对镀银性能的影响及在电子元件中的应

引言在电子电镀与表面处理领域&#xff0c;化学镀银技术至关重要。化学镀银添加剂作为该技术的关键组成部分&#xff0c;其成分对镀银性能有着显著影响&#xff0c;并且在电子元件领域有着广泛应用。AG - 600B化学镀银 - 快速作为一款代表性产品&#xff0c;其性能和应用备受关…

作者头像 李华
网站建设 2026/4/16 13:07:05

CANN 神经网络算子库深度解析与实践指南

引言 在深度学习框架的底层实现中&#xff0c;神经网络算子库扮演着至关重要的角色。CANN ops-nn 是 CANN 生态系统中专门针对神经网络计算优化的算子库&#xff0c;提供了在 NPU 上高效执行各类神经网络操作的基础设施。本文将深入剖析 ops-nn 的架构设计&#xff0c;并通过丰…

作者头像 李华
网站建设 2026/4/16 13:00:44

Python毕设选题推荐:基于Python的就业网站可视化系统设计与实现基于Python大数据的就业网站可视化系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/9 22:45:47

二战后国际经济格局:布雷顿森林体系的诞生与嬗变

二战后国际经济格局&#xff1a;布雷顿森林体系的诞生与嬗变二战彻底重构了全球政治经济秩序&#xff0c;战前以英镑为核心、金本位制为基础的国际货币体系随英国经济衰落彻底崩溃&#xff0c;而美国凭借战时积累的经济、金融与黄金储备优势&#xff0c;主导建立了布雷顿森林体…

作者头像 李华
网站建设 2026/4/16 9:07:23

面向C端用户,提示工程架构师如何设计个性化提示?(技巧+模板)

面向C端用户的个性化提示设计:从“猜你喜欢”到“懂你所想” 引言:为什么C端需要“个性化提示”? 痛点:通用提示的“无效感” 你有没有过这样的经历? 早上急着上班,打开外卖APP问“推荐早餐”,结果收到一堆“全城热门早餐店”,而你其实只想找“公司楼下5分钟可达的清…

作者头像 李华
网站建设 2026/4/15 16:28:56

选择性检索增强代码补全技术解析

通过选择性检索增强仓库级代码补全 大型代码语言模型在补全任意程序函数代码方面表现出色&#xff0c;但面对大型软件开发项目时&#xff0c;正确的代码补全可能依赖于代码仓库中其他地方定义的API调用或函数。检索增强生成通过从仓库中获取相关上下文来解决此问题&#xff0c;…

作者头像 李华