无缓冲文件IO和目录操作

编程入门 行业动态 更新时间:2024-10-21 11:37:24

无缓冲文件IO和目录<a href=https://www.elefans.com/category/jswz/34/1770947.html style=操作"/>

无缓冲文件IO和目录操作

Python微信订餐小程序课程视频

Python实战量化交易理财系统

引言

在后台开发中,对于文件I/O我们通常不使用C语言封装的fopen、fread、fwrite标准I/O,而是直接使用Linux提供的系统调用函数。因为这些系统调用没有使用用户缓冲区,我们直接与内核打交道,效率更高,且可以自己定制一些符合应用场景的操作。下面介绍Linux用于文件I/O的数据结构,以及一些具体的系统调用函数。

文件描述符

所有打开的文件都通过文件描述符引用,文件描述符只在当前进程有效,因为每个进程有一个PCB结构体,PCB包含一个文件描述符表。

文件描述符0对应标准输入、1对应标准输出、2对应标准错误,这些是在进程创建时默认绑定的文件描述符。

以上分别对应unistd.h中的STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO。

每个进程的最大文件描述符可通过ulimit -a命令查看,并可通过ulimit -n 数字设置。

无缓冲文件IO

我们这里所说的无缓冲IO指的是无用户缓冲区,如fopen、fwirte、fread等函数,进程会在用户进程空间维护缓冲区,然后内核还有缓冲区,最后才是磁盘。而无缓冲IO是指只有内核缓冲区而无用户缓冲区,并不是没有任何缓冲区。

内核用于文件I/O的数据结构

每个进程在进程表中都有一个记录项,记录项包含一张打开文件描述符表

在打开文件描述符表中,每个描述符占用一项:

  • 文件描述符标志:目前只有CLOEXEC。
  • 指向文件表项的指针

内核为所有打开文件维持一张文件表,每个文件表项包括:

  • 文件状态标志:包括文件类型和访问权限。
  • 当前文件偏移量
  • 指向该文件inode节点的指针

他们之间的关系如下:



不同的文件表项可以指向相同的文件(i节点即索引结点),这可以使不同的进程有它自己的对该文件的偏移量和打开访问权限。

不同的文件描述符可以指向相同的文件表项。如在fork后,父子进程的

更多推荐

无缓冲文件IO和目录操作

本文发布于:2024-03-23 23:48:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744281.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作   文件   目录   IO

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!