Linux之文件fd
个人主页:点我进入主页
专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C++初阶 C++进阶 算法
欢迎大家点赞,评论,收藏。
一起努力,一起奔赴大厂
目录
一.文件内容的回顾
二.提炼一下对文件的理解
三.理解文件
3.1 open
3.2 close
3.3write
四.文件描述符fd
4.1fd
4.2理解一切皆文件
4.3大致了解一下打开文件和写文件的过程
4.4 文件描述符0,1,2的证明
五.封装
5.1在Linux层面上c语言对底层的封装
5.2c语言为什么这样做
六 再次理解一下一切接文件
一.文件内容的回顾
在c语言中我们学过文件的操作,在这里我先回顾一下文件的操作,代码如下:
#include #include int main() { FILE *fp=fopen("log.txt","w"); if(fp==NULL) { perror("fopen"); return 1; } const char*str="hello file"; fprintf(fp,"%s",str); fclose(fp); return 0; }
我们查看log.txt的内容
我们打开的方式为’w‘,当文件不存在时创建一个文件然后写入,当文件存在时清空文件的内容然后写入,当然还存在另一种写入方式'a',追加。我们在linux中可以使用重定向来创建文件
> a.txt
可以创建一个空文件
我们可以输入
echo hello> a.txt
将hello输入到文件a.txt
每一次输入都是会清空文件的内容然后输入。
当然也存在一种和a方式一样的,
echo file>>a.txt
可以追加到a.txt文件中
二.提炼一下对文件的理解
文件=内容+属性。打开文件本质就是进程打开文件,文件没有打开的时候存在哪里?文件没有打开的时候存在磁盘中;一个进程可以打开多个文件吗? 可以。系统中可以存在多个进程吗?可以。很多情况下的,操作系统中一定存在的大量被打开的文件,操作系统需要对这些打开的文件进行管理,先描述在组织,所以操作系统中一定存在一个类似于PCB的结构。
三.理解文件
文件在磁盘中,磁盘时外设,对文件的操作就是对外设进行操作,用户不可以直接对外设进行操作,操作系统可以对外设进行操作,我们想要写文件就需要操作系统进行操作,所以一定存在一个接口(例如我们c/c++中fprintf/fopen等)可以让操作系统进行文件的操作。
3.1 open
我们查看守则
man 2 open
int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
const char *pathname是指文件的文件名或者文件路径,int flags这个参数是使用位图的形式传入的,mode_t mode是指文件的权限。我们看代码:
#include #include #include #include #include int main() { int fp=open("log.txt",O_CREAT|O_WRONLY,0666); return 0; }
我们可以看到可以出现一个log.txt文件:
对于flags这个参数它类似于
#define A 1 #define B 1_fileno); FILE* fp=fopen("log.txt","w"); if(fp_fileno); return 0; }
结果如下:
五.封装
5.1在Linux层面上c语言对底层的封装
直接看代码:
#include #include #include #include #include #include int main() { int fp1=open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0666); if(fp1