Linux下的文件描述符

发布于:2022-10-16 ⋅ 阅读:(351) ⋅ 点赞:(0)

目录

1.Linux下什么可以被称之为文件

2.了解open函数

3.进程如何访问文件?文件描述符。


1.Linux下什么可以被称之为文件

和平时我们在Windows下所看到的文件不同的是,Linux将所有可以input和output的设备都统称为文件。普通文件通过调用fopen/read之类的调用接口加载入进程内部(内存),然后再调用fwrite之类的接口写入另一个文件。前半部分可以当做input后半部分当做output。


2.了解open函数

 int open(const char *pathname, int flags, mode_t mode);

pathname:文件名;

flags:打开方式:

O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读写打开
这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。
O_APPEND: 追加写
使用多个方式时采用‘|’连结,例如 O_RDONLY|O_CREAT
mode:创建出文件的权限,例如:0666
返回值fd(马上解释)。

3.进程如何访问文件?文件描述符。

一个进程可以打开多个文件,那么OS必然需要管理非常多的文件。实际上OS定义了一个struct file来存储各个文件的属性信息和内容信息。

struct file会以一下形式存在:

struct file
{
    struct file* prev;
    struct file* next;
    (各种信息)
}

那么OS将这么结构体串起来就可以很好的起到管理效果了。

再来谈谈进程是如何逐步获得struct file的:

a.首先进程通过查找task_struct中files*指针。b.找到files_struct,其中有file_array[]数组。c.而上面说的open返回的fd即是文件描述符。一般从3开始,因为0是stdin;1是stdout;2是stderr这些都默认打开的文件。fd就是file_arry[]数组的下标,通过不同下标进程可以找不同的文件,找到了文件自然可以访问它的file_struct。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到