文章目录

  • 1、库函数的基础概念
  • 2、基础文件操作函数
    • 2.1fopen
    • 2.2fread
    • 2.2fwrite
    • 2.4fseek
    • 2.5fclose

1、库函数的基础概念

1、库函数
库函数(Library function)是把函数放到库里,供别人使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。调用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。不受平台限制。

2、流
对于标准的C函数库,文件操作都是围绕着流来进行的,流是一个抽象的概念。

  • 当程序需要读取数据的时候,开启一个通向数据源的流。数据源可以是文件,内存,网络连接等;
  • 当程序==需要写入数,开启一个通向目的地的流,如下图:

3、缓冲区
库函数对文件处理时设置缓冲区,即在程序执行时,会提供额外的内存,来暂时存放文件中的数据,避免多次和内核交互。注意,在实际编程中,这个缓冲区是隐式的,并不会被编程人员显示获取。
那么当我们使用标准I/O函数,即在#include<stdio.h>中的C库函数时,系统会自动设置缓冲区:

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

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

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

2、基础文件操作函数

2.1fopen

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

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

参数说明:

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

2.2fread

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.

2.2fwrite

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。

2.4fseek

fseek()表示重新定位文件内部指针,即指向文件数据上的指针,函数原型为

int fseek(FILE* stream,long offest,int framwhere)

参数说明:

  • stream:文件指针。
  • long offest:指针偏移量。
  • int fram where:指针偏移位置,可取值:
参数 含义
SEEK_SET 距离文件开头offest,宏值为0
SEEK_CUR 距离当前位置offset,宏值为1
SEEK_END 距离文件结尾offset,宏值为2

【举个栗子】fseek(file,20L,2)把file指针退回到离文件结尾20字节处。

  • 返回值:重定位成功返回0,失败则返回-1

2.5fclose

fclose()关闭文件,关闭口缓冲区会把文件缓冲区的数据输出到磁盘文件,并释放文件有关的缓冲区和文件指针。函数原型:

int fclose(FILE* stream)

参数说明:

  • stream:文件指针
  • 返回值:成功0,失败EOF。

【Linux】——库函数相关推荐

  1. Linux 库函数与系统调用的关系与区别

    上周总结了<C 标准库的基础 IO>,其实这些功能函数通过「系统调用」也能实现相应功能.这次文章并不是要详细介绍各系统调用接口的使用方法,而是要深入理解「库函数」与「系统」调用之间的关系和 ...

  2. linux库函数mmap()原理及用法详解

    目录 1.mmap基本概念 2.mmap内存映射原理 3.mmap和常规文件操作的区别 4.mmap优点总结 目录 1. 内存映射的概念 2. mmap基本概念 3. mmap相关函数 3.2 参数说 ...

  3. Linux库函数之opendir/closedir/readdir

    在Linux环境下,有时候需要编写一些实用的工具,比如检索功能,最近在做病毒查杀应用开发,涉及到批量扫描指定目录下文件, 因为要测试大量病毒文件,该部分功能又是要通过API集成到其他应用软件中,设计时 ...

  4. linux 库函数拦截,如何使用net_dev_add()API过滤和拦截Linux数据包?

    您正在使您的模块处理所有以太网数据包. Linux将向所有匹配的协议处理程序发送数据包.由于IP已在您的内核中注册,因此您的模块和ip_rcv都将接收所有带有IP头的SKB. 如果不更改内核代码,则无 ...

  5. linux库函数实现复制文件,linux应用编程笔记(6)库函数方式实现文件复制编程...

    摘要:介绍了库函数文件编程常用的函数,打开,关闭,写,读,定位等,最后通过一个实例将这些函数都运用了一边,加深理解. 一.库函数文件编程常用函数 1.fopen(打开文件) 头文件 #include定 ...

  6. linux库函数pthread.h------pthread_rwlock_t读写锁说明

    读写锁 索引: 初始化一个读写锁pthread_rwlock_init 读锁定读写锁 pthread_rwlock_rdlock 非阻塞读锁定 pthread_rwlock_tryrdlock 写锁定 ...

  7. linux+mmap父子通信_linux库函数mmap()原理?转载

    linux库函数mmap()原理 转载 1.mmap基本概念 2.mmap内存映射原理 3.mmap和常规文件操作的区别 4.mmap优点总结 5.mmap相关函数 6.mmap使用细节 7.mmap ...

  8. Linux系统编程@文件操作(一)

    只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...

  9. osg linux 环境配置,Linux环境下jdk1.8的下载与安装

    Linux环境下jdk1.8的下载与安装 1.下载 Oracle官网下载相应的版本,官网地址:https://www.oracle.com/java/technologies/javase/javas ...

  10. linux系统调用理解之摘录(3)

    Linux系统调用需要持续不断地深入理解,因此这里收集一些较好的博客,以便后续自己参考研究: (1)Linux 库函数与系统调用的关系与区别 https://www.cnblogs.com/liwei ...

最新文章

  1. 泛前端知识图谱(Web/iOS/Android/RN)
  2. 《深入浅出Ext JS》2.19全国首发
  3. Java如何打印异常的堆栈?
  4. pid控制从入门到精通pdf_【应用指南】PID调节让流量/压力控制又快又稳
  5. Eclipse导入Spring Boot项目后pom.xml出现红叉的解决办法
  6. SAP Spartacus取语言设置的入口程序
  7. VA Code编写html(1)
  8. ASP.NETCore小技巧:使用测试用户中间件
  9. python ansible模块_Python之——Ansible常用模块及API,pythonansibleapi
  10. 在3D场景中显示汉字
  11. Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
  12. 软件公司内部协作平台的选型(项目/BUG/需求管理及用户支持)
  13. 刀片服务器接显示器,认识刀片服务器
  14. ASP.NET ZERO 学习 —— (1) 介绍
  15. startup_stm32xxxx.s文件问题
  16. 从上到下,一文带你看全所有GNN分类
  17. 带宽叠加是什么意思?
  18. 升级sp1后文档无法编辑
  19. 频域处理:傅里叶变换及小波变换
  20. 像把大象放入冰箱那样制造芯片

热门文章

  1. 在Centos7中配置NIS的详细过程
  2. 数据分散情况的统计图-盒须图
  3. sql语句转为mysql语句_sql语句转换 sqlserver 转成mysql语句。
  4. TeamTalk源码分析(三) —— 服务器端的程序架构介绍
  5. 10 张有关程序员的趣图,图图戳心
  6. 软件、Chrome字体细到模糊发虚解决方案
  7. onload什么时候执行
  8. Unity3D的Json篇:LitJson.dll插件
  9. java poi 将公文套红 并 电子签章
  10. windows script host是什么意思,windows based script host