Linux软件编程(2)- 标准IO(1)

一、IO概念:

1.IO指input/output

2.Linux系统中一切皆是文件

3.IO操作的对象是文件

二、文件分类

1.b(block,块设备文件)

按块扫描信息的文件,称为块设备文件。通常存储类型的设备通常为块设备文件

文件IO

2.c(character,字符设备文件)

按字符扫描信息的文件,称为字符设备文件。一般设备通常为字符设备文件

文件IO

3.d(directory,目录文件)

目录文件,存放文件的文件夹

目录IO/文件IO

4.-(普通文件)

存放信息的文件

标准IO/文件IO

5.l(link,链接文件)

操作文件等价于操作文件指向的文件

链接IO/文件IO

6.s(socket,套接字文件)

用来进程间通信

文件IO

7.p(pipe,管道文件)

用来进程间通信

文件IO

三、标准IO

1.通常用来操作普通文件

2.普通文件类型

(1)ASCII码文件:文件中的所有内容均为能够在屏幕上显示的ASCII码字符

程序、文本文件均为ASCII码文件

(2)二进制文件:文件中的所有内容均为数据对应的二进制形式存放(包含一些不能在界面上显示的内
容)

ASCII码文件也是二进制文件

图片、音视频、压缩包均为二进制文件

3.文件的操作

(1)函数接口

①fopen

原型:FILE *fopen(const char *pathname, const char *mode);
功能:打开pathname指向字符串对应的文件,并且和它建立一个流
参数:
pathname:要打开的文件路径字符串
mode:打开的方式


r 只读 文件存在只读打开,文件不存在报错
r+ 读写 文件存在读写打开,文件不存在报错
w 只写 文件存在清0,文件不存在创建,只写打开
w+ 写读 文件存在清0,文件不存在创建,写读打开
a 追加 文件存在追加,文件不存在创建,只写打开
a+ 追加读写 文件存在追加,文件不存在创建,写读打开


返回值:
成功返回FILE*指针
失败返回NULL

②fclose

原型:int fclose(FILE *stream);
功能:
关闭已经打开的流
参数:
stream:文件流指针
返回值:
成功返回0,失败返回EOF(-1)

③fputc

原型:int fputc(int c, FILE *stream);
功能:
将字符c写入流中
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回输出的ASCII码值
失败返回EOF

注意:putchar()等价于fputc(ch, stdout)

④fgets

原型:int fgetc(FILE *stream);
功能:
读取流中的下一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
失败或者读到文件末尾返回EOF

注意:ch = getchar()等价于 ch = fgetc(stdin)

⑤fputs

原型:int fputs(const char *s, FILE *stream);
功能:
向流中写入s指向的字符串
参数:
s:要写入的字符串的首地址
stream:文件流指针
返回值:
成功返回非负数
失败返回EOF

注意:fputs不会多打印\n字符,puts会多打印一个\n字符

⑥fgets

原型:char *fgets(char *s, int size, FILE *stream);
功能:
从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止
参数:
s:存放数据空间的首地址
size:最多存放元素的个数
stream:文件流指针
返回值:
成功返回存放数据空间的首地址
失败返回NULL
读到文件末尾返回NULL

注意:gets会去掉从终端接收的\n字符,fgets不会去掉从终端接收的\n字符

⑦fprintf

原型:int fprintf(FILE *stream, const char *format, ...);
功能:
将格式化的字符串打印在流中
参数:
stream:文件流指针
format:格式化的字符串
...:参数
返回值:
成功返回打印字符的个数
失败返回负shu

⑧fscanf

原型:int fscanf(FILE *stream, const char *format, ...);
功能:
从流中接收格式化的字符串
参数:
stream:文件流指针
format:格式化字符串
...:参数
返回值:
成功返回匹配的输入控制符的个数
失败返回EOF
读到文件末尾返回EOF

(2) 已经打开的三个特殊的流:

stdin:标准输入流

stdout:标准输出流

stderr:标准出错流

注:printf、puts、putchar都是通过stdout流实现在终端信息打印

       scanf、gets、getchar都是通过stdin流实现获得终端信息

       perror通过stderr流实现在终端打印出错信息

4.标准IO的缓存

(1)标准IO缓存:

标准IO是一种有缓存的IO

效率高

实时性差

(2)缓存的类型:

① 全缓存(4k):

缓存区满刷新缓存

刷新条件:

缓存区满4k刷新

fflush函数强制刷新

fclose或者程序关闭刷新

与文件建立的缓存一般为全缓存

②行缓存(1k):

遇到\n刷新缓存区

刷新条件:

缓存区满1k刷新

遇到\n刷新

fflush函数强制刷新

fclose或者程序关闭刷新

与终端建立的缓存一般为行缓存(stdin、stdout均为行缓存)

③不缓存(0k):

立即刷新不缓存

刷新条件:

不缓存立即刷新

出错处理或者人机交互一般使用不缓存(stderr不缓存)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值