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

相关推荐
小龙报2 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
承渊政道2 小时前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio
浅念-2 小时前
C语言——动态内存管理
c语言·开发语言·c++·笔记·学习
学嵌入式的小杨同学10 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
精彩极了吧11 小时前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
进击的小头13 小时前
实战案例:51单片机低功耗场景下的简易滤波实现
c语言·单片机·算法·51单片机
czy878747514 小时前
const 在 C/C++ 中的全面用法(C/C++ 差异+核心场景+实战示例)
c语言·开发语言·c++
pcm12356716 小时前
设计C/S架构的IM通信软件(4)
java·c语言·架构
代码无bug抓狂人16 小时前
C语言之表达式括号匹配
c语言·开发语言·算法