一.文件
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系统调用
![]()



被折叠的 条评论
为什么被折叠?



