Linux之文件fd

07-14 1537阅读

个人主页:点我进入主页

专栏分类: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的内容 

 Linux之文件fd

我们打开的方式为’w‘,当文件不存在时创建一个文件然后写入,当文件存在时清空文件的内容然后写入,当然还存在另一种写入方式'a',追加。我们在linux中可以使用重定向来创建文件

> a.txt

可以创建一个空文件

Linux之文件fd

我们可以输入

echo hello> a.txt

 将hello输入到文件a.txt

Linux之文件fd

每一次输入都是会清空文件的内容然后输入。

当然也存在一种和a方式一样的,

echo file>>a.txt

 可以追加到a.txt文件中

Linux之文件fd

二.提炼一下对文件的理解

        文件=内容+属性。打开文件本质就是进程打开文件,文件没有打开的时候存在哪里?文件没有打开的时候存在磁盘中;一个进程可以打开多个文件吗? 可以。系统中可以存在多个进程吗?可以。很多情况下的,操作系统中一定存在的大量被打开的文件,操作系统需要对这些打开的文件进行管理,先描述在组织,所以操作系统中一定存在一个类似于PCB的结构。

 三.理解文件

        文件在磁盘中,磁盘时外设,对文件的操作就是对外设进行操作,用户不可以直接对外设进行操作,操作系统可以对外设进行操作,我们想要写文件就需要操作系统进行操作,所以一定存在一个接口(例如我们c/c++中fprintf/fopen等)可以让操作系统进行文件的操作。

Linux之文件fd

 3.1 open

我们查看守则

man 2 open

Linux之文件fd

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文件: 

Linux之文件fd

对于flags这个参数它类似于

#define A 1
#define B 1_fileno);
    
    FILE* fp=fopen("log.txt","w");
    if(fp_fileno);
    return 0;
}

结果如下:

Linux之文件fd 

五.封装

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
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]