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

相关推荐
norlan_jame2 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874752 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
m0_531237172 天前
C语言-数组练习进阶
c语言·开发语言·算法
Z9fish2 天前
sse哈工大C语言编程练习23
c语言·数据结构·算法
代码无bug抓狂人2 天前
C语言之单词方阵——深搜(很好的深搜例题)
c语言·开发语言·算法·深度优先
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习
枫叶丹42 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
with-the-flow2 天前
从数学底层的底层原理来讲 random 的函数是怎么实现的
c语言·python·算法
Sunsets_Red2 天前
P8277 [USACO22OPEN] Up Down Subsequence P 题解
c语言·c++·算法·c#·学习方法·洛谷·信息学竞赛
小刘爱玩单片机2 天前
【stm32简单外设篇】- 测速传感器模块(光电)
c语言·stm32·单片机·嵌入式硬件