【Linux】文件IO (标准IO&文件IO&重定向&静态库&动态库)

这篇博客详细介绍了Linux中的标准IO和文件IO,包括它们的定义、文件流指针、系统调用的区别以及重定向。标准IO提供了缓冲机制,减少了系统调用的次数,提高了效率。文件IO则直接操作文件,每次操作都会执行系统调用。此外,还讨论了静态库和动态库的创建和使用,静态库在编译时与程序整合,而动态库在运行时加载。
摘要由CSDN通过智能技术生成

Linux标准I/O与文件IO

一.标准IO

1.定义

标准I/O指的是ANSI C中定义的用于I/O操作的一系列函数。只要操作系统安装了C库,就可以调用标准I/O。换句话说,若程序使用标准I/O函数,那么源代码无需进行任何修改就可以在其他操作系统上编译,具有更好的可移植性。I/O封装了缓冲区,使得在读写文件的时候减少了系统调用的次数,提高了效率。在执行系统调用的时候,Linux必须从用户态切换到内核态,在内核中处理相应的请求,然后再返回用户态。如果频繁地执行系统调用则会增加这种开销。标准I/O为了减少这种开销,采取缓冲机制,为用户空间创建缓冲区,读写时优先操作缓冲区,在必须访问文件时(例如缓冲区满、强制刷新、文件读写结束等情况)再通过系统调用将缓冲区的数据读写实际文件中,从而避免了系统调用的次数。
 

2、文件流指针(FILE*)的定义

标准I/O的核心对象是文件流。当用标准I/O打开一个文件时,就会创建一个FILE指针指向结构体描述该文件。我们把这个FILE*称为文件流指针。标准I/O函数都是基于流进行各种操作的。

 

3.文件流指针和文件的关系

可以想象成一个传送带,传送带上的产品就是待操作数据。当我们对文件内的数据进行操作时,已操作的数据从当前位置离开,待操作的数据不断流向当前位置,这样文件内的数据就产生了流动的感觉,这个“传送带”就是C语言内“流”的原型。在程序开始执行的时候,操作系统会默认开启stdinstdoutstderr三个文件,这三个文件作为输入、输出、输出错误的流。

 

4.标准IO编程

1.fopen函数

需要头文件#include<stdio.h>

函数原型FILE *fopen(const char *path,const char *mode)

函数参数:path:要打开的文件的路径及文件名

 

  mode: 

r:以方式打开,如果当前打开的文件不存在,则报错

r+:以读写方式打开,如果当前打开的文件不存在,则报错

w:以方式打开,如果文件不存在,则创建。如果当前文件存在,则将当前文件截断,文件留置针指向文件头部

w+:以读写方式打开,如果文件不存在,则创建。如果当前文件存在,则将当前文件截断,文件留置针指向文件头部

a:以追加方式打开,如果文件不存在则创建

a+:以追加方式打开,如果文件不存在则创建,当前a+是支持读的

 函数返回值:成功:指向文件的FILE类型指针


 

2.fread函数 和 fwrite函数

 

3

需要头文件:#include<stdio.h>

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

函数

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值