IO学习笔记 《一》

1、什么是IO

I:input

o:output

输入:从键盘将数据输入到内存中

输出:从内存将数据拷贝到显示屏上

对IO更深层次的理解

Linux下一切皆文件

输入:从文件将数据输入到内存中

输出:从内存将数据拷贝到文件中

  1. 标准IO

标准IO由ANSI C标准说明

  1. 可以跨平台,既可以在windows下使用,又可以在Linux上使用
  2. 库函数
  3. 有缓冲机制
  4. 通过文件流指针来进行操作
  5. 一般用于普通文件的操作
  1. 相关概念

3.1文件

一组相关数据的有序集合

文件名:这组集合的名称

3.2 文件类型

1、普通文件 -

a.ASCII码文件(文本文件)   b、二进制文件

2、目录文件 d

3、块设备文件 b

4、字符设备文件 c

5、链接文件  l

6、管道文件 p

7、套接字文件 (socket)s

3.3 系统调用

系统:操作系统

调用:调用函数

系统调用:调用操作系统提供的函数

系统调用:操作系统提供给应用程序的接口(函数)

3.4 缓冲区

作用:减少系统调用的次数全缓存:当缓冲区满、程序结束、强制刷新缓冲区时会刷新缓冲区

行缓存:当缓冲区满、程序运行结束、强制刷新缓冲区、遇到换行符时会刷新缓冲区

不缓存:没有缓存区,直接输出

程序运行起来之后,会默认打开三个文件,标准输入、标准输出、标准出错,对应的流指针分别为stdin、stdout、stderr

流和FILE指针

3.5.1 流

流:字节的进进出出

流的分类:

文本流:数字2001对应的文本流为’2’ ‘0’ ‘0’ ‘1’(50 48 48 49)

二进制流:数字2001对应的二进制流:00000111  11010001

3.5.2 FILE指针

每个被使用的文件都会在内存中开辟一个空间,用来保存文件的相关信息,这些信息保存在结构体中,取名为FILE

注意:标准IO中所有的操作都是围绕流来进行的,流用FILE *来描述

  1. 标准io相关函数

文件操作步骤:

打开文件

操作文件

关闭文件

4.1 打开文件

FILE *fopen(const char *pathname, const char *mode);

函数功能:打开文件

参数1:要打开文件的路径

参数2:打开的方式

r:以只读的方式打开文件,文件不存在则出错

r+:以可读可写的方式打开文件,文件不存在则出错

w:以只写的方式打开文件,文件不存在则新建,文件存在清空文件中的内容

w+:以可读可写的方式打开文件,文件不存在则新建,文件存在清空文件中的内容

a:以追加的方式打开只写的文件,文件不存在则新建,文件存在则追加到文件的末尾

a+:以追加的方式打开可读可写文件,文件不存在则新建,文件存在则追加到文件的末尾

返回值:成功返回文件流指针,失败返回NULL

4.2 关闭文件

int fclose(FILE *stream);

参数:fopen的返回值,已经打开的文件流指针

返回值:成功返回0,失败返回EOF(-1)

注意:EOF(end of file)只能判断是否到达文本文件的末尾,不能判断二进制文件

4.3 操作文件(读/写)

按字符读写、按行读写、按块读写

4.3.1 按字符读写

getchar()、putchar()只能从键盘输入

fgetc()、fputc() 即能从键盘输入、又可以从文件中输入

int fgetc(FILE *stream);

功能:从指定的流中读取一个字符

参数:fopen的返回值,已经打开的文件流指针

返回值:成功返回读到ASCII码值,失败or读到文件末尾返回-1

int fputc(int c,FILE *stream)

功能:向指定的流中输出一个字符

参数1:要输出的字符

参数2:fopen的返回值,已经打开的文件流指针

返回值:成功返回写入的ASCII码值,失败返回-1

int feof(FILE *stream);

函数功能:判断文件是否到达文件末尾

参数:文件流指针

返回值:非0表示到达文件末尾,为0表示没有到达文件末尾

注意:feof即可以判断是否到达文本文件的末尾,也可以判断是否到达二进制文件的末尾

4.3.2 按行读写

gets( )、puts( )

fgets( )、fputs( )

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

函数功能:从指定的流中读取一串字符

参数1:读到的内容的空间的首地址

参数2:读多大

参数3:文件流指针

返回值:成功返回读到的内容空间的首地址,失败或者读到文件末尾返回NULL

总结:

  1. fgets读取遇到换行符时会将换行符也读入
  2. fgets最多读取size-1个

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

函数功能:向指定的六种输出一串字符

参数1:要输出的字符串的首地址

参数2:文件流指针

返回值:成功返回非负的整数,失败返回-1

总结:

  1. fgets和gets的区别
  1. fgets比gets更安全,最多读取size-1个字符
  2. fgets读取时会将换行符也读入
  1. fputs和puts的区别

 puts会自动添加黄行符,而fputs不会

4.3.3 按块读写

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

功能:按块读写

参数1:读到内容空间的首地址

参数2:块的大小

参数3:块的个数

参数4:要操作的文件流指针

返回值:成功返回读到的块数,失败返回-1

//假设读100个字节,每个块的大小为20,块的个数5

一般情况下:将size设为1, nmemb要读的大小,返回值就是实际读到的字节数

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

功能:按块写数据

参数1:要写的内容空间的首地址

参数2:块的大小

参数3:块的个数

参数4:文件流指针

返回值:成功返回写入的块数,失败返回-1

long ftell(FILE *stream);

函数功能:获取当前文件的位置

参数:文件流指针

返回值:成功当前文件的位置,失败返回-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值