第一章 文件I/O

2018-04-01  本文已影响18人  人生背包客

Linux中的文件


文件、文件描述符和文件表


Linux内核将一切视为文件,狭义上是指文件系统系统中的物理文件,广义上则可以是Linux管理的所有对象。广义上的文件利用VFS机制以文件系统的形式挂载Linux内核中,对外提供一致的文件操作接口。

文件描述符本质上就是一个句柄,对于用户来说就是透明的,无需知道内部数据结构。文件描述符即句柄,好处如下:一是增强了安全性;二是增强了可扩展性。

Linux的每个进程都会维护一个文件表,方便维护该进程打开文件的信息。

内核文件表的实现

源码部分

为什么会存在两个 fdtable 主要是内核的一种优化策略。fdt为指针,而 ftdtab 为普通变量。正常情况下 fdt 是指向 fdtab的,当需要它的时候才会真正的动态申请内存。因为默认大小的文件数足以满足大多数场景,这样可以避免频繁的内存申请。

。。。。持续跟新中

文件表、文件描述符表及文件结构关系图

源码今天还未下载好,后期会补上源码


打开文件

open介绍

init open(const char *pathname, int flags);

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

在C语言中是不允许函数重载的,那么内核不可能为这个功能创建两个系统调用。在Linux内核中,实际上只提供一个系统调用,是对应上面的第二个函数。那么实际上调用的是glibc封装的函数,然后由glibc通过自陷指令进行真正的系统调用,最终所有的系统调用都是先经过glibc才回进入操作系统。

上一篇下一篇

猜你喜欢

热点阅读