美文网首页
第一章 文件I/O

第一章 文件I/O

作者: 人生背包客 | 来源:发表于2018-04-01 01:36 被阅读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才回进入操作系统。

    相关文章

      网友评论

          本文标题:第一章 文件I/O

          本文链接:https://www.haomeiwen.com/subject/xcmncftx.html