十 一、I/O操作之库函数(一)

Linux上一切皆文件,我们现在来学习如何处理文件,处理文件有两种方式,一种是利用库函数,一种是系统调用,那我们首先来学习一下库函数。

一、库函数基础概念

1. 库函数:库函数(Library function)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。不受平台限制。
2. 流:对于标准的C函数库,文件操作都是围绕着流来进行的,流是一个抽象的概念,当程序需要读取数据的时候,开启一个通向数据源的流,数据源可以是文件,内存,网络连接等;当程序需要写入数据时,开启一个通向目的地的流,如下图:
在这里插入图片描述
3. 缓冲区: 库函数对文件处理时设置缓冲区,即在程序执行时,会提供额外的内存,来暂时存放文件中的数据,避免多次和内核交互。注意,在实际编程中,这个缓冲区是隐式的,并不会被编程人员显示获取。
那么当我们使用标准I/O函数,即在#include<stdio.h>中的C库函数时,系统会自动设置缓冲区:

  • 通过数据流来读写文件,那么当对文件进行读取时,不会直接操作作为源头的物理空间(如磁盘),而是打开数据流,将源头上的文件信息拷贝到缓冲区中,然后程序再从缓冲区中读取所需数据。
    在这里插入图片描述
  • 当写入文件时,也并不会马上就写入终点物理空间(如磁盘等),而是先写入缓冲区,只有在缓冲区满或者关闭文件时,才会将缓冲区的数据写入终点,如下图:
    在这里插入图片描述

4. 文件指针: 用库函数的方式访问文件,用FILE类型表示一个打开的文件,这个类型中包含管理文件流的信息,我们将指向该类型的指针FILE*称为文件指针。借用该指针可以对它指向的文件进行操作。

5. 文件类型: 文本类型和二进制,b就表示二进制文件。

二、基础文件操作函数

那下面我们介绍基础的文件操作:

(一)fopen

fopen()表示打开一个文件,这是文件操作的第一步。函数原型如下:

FILE fopen(const char path,const char* mode)**

参数说明:

  • const char* path:表示打开文件路径和文件名,如果在同一目录下,那么只写文件名即可,不在同一目录下需要写绝对路径加文件名。
  • const char* mode:表示打开文件的方式,可以取值如下:
参数 含义
r 只读方式打开,文件必须存在,否则出错
r+ 可读写,文件必须存在
rb+ 以读写方式打开二进制文件
rt+ 以读写方式打开文本文件
w 只写,文件存在则覆盖,不存在建立该文件
w+ 可读写,文件存在则覆盖,不存在建立该文件
wb 只写方式打开二进制文件
w+ 可读写,文件存在覆盖,不存在建立
a 只写,存在写入的数据追加到文件尾,EOF符保留,不存在建立文件
a+ 读写,存在写入的数据追加到文件尾,EOF符不保留,不存在建立文件
  • 返回值:打开成功返回文件指针,失败返回NULL。

(二)fread

fread()函数表示从文件流读取数据,函数原型为:

size_t fread(void* buff,size_t size,size_t count,FILE* stream)

参数说明:

  • void* buff :接受数据的数据块指针。
  • size_t size :每次读取数据的大小。一般用sizeof(数据类型)获取。
  • size_t count :读取数据个数。一般用strlen(存储数据变量名)获取。
  • stream:指向要读取的文件。
  • 返回值:读取成功则返回读取到的字节,失败返回0.

(三)fwrite

fwrite()表示向文件中写入数据,函数原型:

size_t fwrite(const void* buffer,size_t size,size_t count,FILF* stream)

参数说明:

  • const void* buffer:保存数据的数据块指针。
  • size_t size:数据块的大小。一般用sizeof(数据类型)获取。
  • size_t size:数据个数。为存储数据的数据块定义的大小。
  • stream:要写入数据的文件指针。
  • 返回值:成功返回写入的数据量,失败返回0。

(四)fseek

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值