文件IO及相关操作

2025博客之星年度评选已开启 10w+人浏览 420人参与

一.文件

1.狭义理解

a.文件在磁盘里

b.磁盘是外设

c.对文件的所有操作本质上都是对外设的输入和输出 简称IO

2.广义理解

Linux下一切皆文件

3.认识

a.文件 = 内容 + 属性

所以一个文件被创建,即使文件大小为0,在磁盘上也要占据空间,因为它还有属性需要被存储

b.所有对文件操作的本质都是对文件的内容或者属性进行操作

4.系统角度

a.对文件的操作本质是进程对文件的操作

b.磁盘的管理者是操作系统

c.文件的读写本质不是通过C/C++语言的库函数来操作的(这些库函数只是为用户提供方便),而是通过文件相关的系统调用接口来实现的

二.回顾C语言文件接口

1.路径

在我们使用接口时,系统怎么知道在当前路径在哪里?

系统在创建进程的时候会记录路径

test1是一个死循环程序

2.打开文件的方式(fopen)

3.写文件(frite)

4.读文件(fread)

5.实现简单cat命令

6.输出到显示器的方法

printf,fprintf,fwrite

二.系统文件接口

1.一种传递标志位的方法:位图

2.系统调用接口介绍

open,read,write,close

open打开文件方式:

fopen,fread,fwrite,fclose都是C标准库中的函数

open,read,write,close都是系统提供的系统调用接口

可以认为f系列的函数都是对系统调用的封装,方便二次开发

3.用系统调用接口写文件

4.用系统调用接口读文件

5.文件描述符fd

open函数的返回值是一个整数fd,这个返回值就是文件描述符

当我们打开⽂件时,操作系统在内存中要创建相应的数据结构来描述⽬标⽂件。于是就有了file结构体。表⽰⼀个已经打开的⽂件对象。⽽进程执⾏open系统调⽤,所以必须让进程和⽂件关联起来。每个进程都有⼀个指针*files, 指向⼀张表files_struct,该表最重要的部分就是包含⼀个指针数组,每个元素都是⼀个指向打开⽂件的指针!所以,本质上,⽂件描述符就是该数组的下标。所以,只要拿着⽂件描述符,就可以找到对应的⽂件。

文件描述符分配规则

6.重定向

此时,我们发现,本来应该输出到显⽰器上的内容,输出到了⽂件 myfile 当中,其中,fd=1。这

种现象叫做输出重定向。常⻅的重定向有: > , >> , <

那重定向的本质是什么呢?

printf是C库当中的IO函数,⼀般往 stdout 中输出,但是stdout底层访问⽂件的时候,找的还是fd:1, 但此时,fd:1下标所表⽰内容,已经变成了myfifile的地址,不再是显⽰器⽂件的地址,所以,输出的任何消息都会往⽂件中写⼊,进⽽完成输出重定向。


7.dup2系统调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值