Linux学习—软件编程(IO)

1.IO

1.1 概念

  • IO指input / output
  • Linux系统中一切皆是文件
  • IO操作的对象是文件

1.2 文件

  • 一段数据的集合
  • 文件通常存放在外存中,掉电后数据不会消失
bblock块设备文件按块(512字节)扫描设备信息文件IO

c

character字符设备文件按字符扫描设备信息文件IO
ddirectory目录文件存放文件的文件夹目录IO/文件IO
-普通文件存放信息标准IO/文件IO
llink链接文件类似于windows的快捷方式链接IO/文件IO
ssocket套接字文件用来进程间通信文件IO

p

pipe管道文件用来进程间通信文件IO

1.3 标准IO

1.概念

通常用来操作普通文件

2.普通文件类型

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

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

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

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

3.标准IO的接口

fopen/fclose
fgetc/fputc
fgets/fputs
fscanf/fprintf
fread/fwrite
fseek/rewind/ftell

操作步骤

  • 打开文件
  • 读写文件
  • 关闭文件

4.文件的打开

fopen

原型:FILE *fopen(const char *pathname, const char *mode);
功能:fopen() 函数打开由 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(-1)

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

fgetc

原型:int fgetc(int c, FILE *stream);
功能:读取流中的下一个字符
参数:
    stream:文件流指针
返回值:
    成功返回输出的ASCII码值
    失败返回EOF(-1)

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

fputs

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

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

fgets

原型:char *fgets(const 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:格式化的字符串
    ...:参数
返回值:
    成功返回打印字符的个数
    失败返回负数

fscanf

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

已经打开的三个特殊的流

stdin:标准输入流

stdout:标准输出流

stderr:标准出错流

  • printf、puts依赖于stdin
  • gets、scanf、getchar依赖于stdout
  • perror依赖于stderr

5.标准IO的缓存

标准IO缓存

  • 标准IO是一种有缓存的IO
  • 效率高
  • 实时性差

缓存的类型

1.全缓存:缓存区满(4k)刷新缓存、fflush函数强制刷新、fclose或者程序关闭刷新

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

2.行缓存:遇到\n刷新缓存区、缓存区满(1k)刷新缓存、fflush函数强制刷新、fclose或者程序关闭刷新

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

3.不缓存:立即刷新,不缓存(0k)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值