Linux软件编程--标准IO

1、概念

  • I / O指 input / output
  • IO操作的对象是文件,在 Linux 系统中一切都是文件

2、文件

        文件是一段数据的集合,通常存放在外存中,掉电不会丢失去

        文件的分类
  • b( block ,块设备文件)
    • 按块扫描信息的文件称为块设备文件,存储类型的设备通常为块设备文件(磁盘等)
    • 一般通过文件IO操作块设备文件
  • c( character ,字符设备文件)
    • 按字符扫描信息的文件称为字符设备文件,一般设备通常为字符设备文件
    • 一般通过文件IO来操作字符设备文件
  • d( directory ,目录文件)
    • 存放目录的文件
    • 一般通过目录IO或文件IO操作目录文件
  • -(普通文件)
    • 存放信息的文件
    • 一般通过标准IO或文件IO操作
  • l( link ,链接文件)
    • 操作链接文件等价于操作链接文件所连接的文件
    • 通常通过链接IO或文件IO操作
  • s( socket ,套接字文件)
    • 用于进程间通信的文件
    • 通常通过文件IO操作
  • p( pipe ,管道文件)
    • 用于进程间通信
    • 常通过文件IO操作

3、标准IO

  1.缓存与标准IO
        标准IO
  • 用来操作普通文件的IO
  • 是一种有缓存的IO,具有效率高、时效性差的特点
        缓存的类型
  • 缓存:当缓存区满时,将缓存区数据送入内核进行处理
  • 全缓存
    • 刷新条件
      • 缓存区满刷新(缓存区满内存为 4kb )
      • 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
    • 与文件建立的缓存一般是全缓存
  • 行缓存
    • 刷新条件
      • 缓存区满刷新(行缓存区满内存为 1kb )
      • 调用函数刷新,如 fflush 强制刷新、fclose 或者关闭程序刷新
    • 与终端建立的缓存一般为行缓存
  • 不缓存
    • 立即刷新
    • 出错处理与人机交互一般不缓存
2、普通文件的类型
  • ASCLL码文件:文件中的内容均为能在屏幕上显示的ASCLL字符
    • 程序、文本文件均为ASCLL码文件
  • 二进制文件:文件中的所有内容均为数据对应的二进制形式存放(包含一些不能在界面上显示的内 容)
    • ASCII码文件也是二进制文件
    • 图片、音视频、压缩包均为二进制文件
3、标准IO的接口

  1.fopen 

原型:FILE *fopen(const char *pathname, const char *mode);

功能: 打开pathname指向字符串对应的文件,并且和它建立一个流

参数: pathname:要打开的文件路径字符串

            mode:打开的方式 r 只读 文件存在只读打开,文件不存在报错

            r+ 读写 文件存在读写打开,文件不存在报错

            w 只写 文件存在清0,文件不存在创建,只写打开

            w+ 写读 文件存在清0,文件不存在创建,写读打开

            a 追加 文件存在追加,文件不存在创建,只写打开

            a+ 追加读写   文件存在追加,文件不存在创建,写读打开

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

  2.fclose

原型:int fclose(FILE *stream);

功能: 关闭已经打开的流

参数: stream:文件流指针

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

  3.fputc

原型:int fputc(int c, FILE *stream);

功能: 将字符c写入流中

参数: c:要写入的字符   stream:文件流指针

返回值: 成功返回输出的ASCII码值   失败返回EOF

  4.fgetc

原型:int fgetc(FILE *stream);

功能: 读取流中的下一个字符

参数: stream:文件流指针

返回值: 成功返回读到字符的ASCII码值 失败或者读到文件末尾返回EOF

  5.fputs

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

功能: 向流中写入s指向的字符串

参数: s:要写入的字符串的首地址 stream:文件流指针

返回值: 成功返回非负数 失败返回EOF

  6.fgets

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

功能: 从流中最多读size-1个字节数据放入s指向的空间中,遇到\n读取截止

参数: s:存放数据空间的首地址 size:最多存放元素的个数 stream:文件流指针

返回值: 成功返回存放数据空间的首地址 失败返回NULL 读到文件末尾返回NULL

  7.fprintf

原型:int fprintf(FILE *stream, const char *format, ...);

功能: 将格式化的字符串打印在流中

参数: stream:文件流指针 format:格式化的字符串 ...:

参数 返回值: 成功返回打印字符的个数 失败返回负数

  8.fscanf

原型:int fscanf(FILE *stream, const char *format, ...);

功能: 从流中接收格式化的字符串

参数: stream:文件流指针 format:格式化字符串 ...:参数

返回值: 成功返回匹配的输入控制符的个数 失败返回EOF 读到文件末尾返回EOF

9.fwrite

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

功能:将 prt 处的 nmemb 个大小为 size 的数据以二进制文件形式写入 stream中

参数:ptr :数据源地址 

          size :写入数据大小

          nmemb:写入数据个数

          stream:写入流地址

返回值:写入成功返回写入数据的个数,失败或读到文件末尾返回 0 

10.fread

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

功能:从流stream中读入 nmemb 个大小为 size 的二进制数据,并将其存储到首地址为 ptr            的空间中

参数:ptr :数据存储首地址 

          size :读入数据大小

          nmemb:读入数据个数

          stream:读入流地址

返回值:读入成功返回读入数据的个数,失败或读到文件末尾返回 0 

11.fseek

 原型:int fseek(FILE *stream, long offset, int whence);

       

功能:实现 stream 流文件显示位置的偏移,从 whence 开始偏移 offset 位

参数:stream:读入流地址

           offset:偏移量,负数前移,正数后移

           whence:设定位置

                SEEK_SET:开头位置

                SEEK_CUR:当前位置

                SEEK_END:结束位置

返回值:操作成功返回0 ,否则返回 -1

12.ftell

原型: long ftell(FILE *stream);

 功能:返回当前位置前数据量

13.rewind

原型:void rewind(FILE *stream);

 功能:返回初始位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值