【问题标题】:File Access method in LinuxLinux中的文件访问方法
【发布时间】:2011-12-03 21:03:04
【问题描述】:

看教科书主要有两种文件访问方式;顺序和直接。我们在 Linux 中使用的是哪一个?

在读取命令中,我们给出要读取的字节数以及要读取的缓冲区。所以我们在 Linux 中有顺序访问?

但实际上我们存储的文件是块吗?我无法与之相关。

在 Linux 中是否可以直接访问?

我在 Galvin 的操作系统概念中读到了这些访问模型

【问题讨论】:

    标签: linux file file-io filesystems operating-system


    【解决方案1】:

    两者都可以。

    当您对普通文件执行read 时,它确实会按顺序读取文件,每次都会将文件指针前进适当的量。

    但您也可以使用seek 移动到文件中的任意点。

    并非所有文件都支持随机/直接访问。例如,管道通常只是顺序访问(您不能后退或向前跳过)。

    所以几乎一切皆有可能,但某些文件类型有限制。

    (使用直接 I/O(O_DIRECT 标志)访问文件是完全不同的概念。)

    【讨论】:

      【解决方案2】:

      您当然可以从打开的(光盘)文件中的任意位置读/写。

      随机 IO 有多种方法,针对不同的使用情况进行了优化。

      • 最简单的方法是 seek() 后跟 read() 或 write()。文件指针按读/写的字节数移动,它可以允许随机跳转后的顺序 IO。将 seek() 视为在逻辑上旋转旧的“卷到卷”磁带驱动器(即使我们不再拥有这些)。
      • pread 和 pwrite 系统调用结合了 seek() 和 read/write(),专门用于多线程程序(其中两个系统调用会导致竞争条件)。它们不会更改文件指针,因此您可以在逻辑上认为它只是获取或放置随机数据位。
      • mmap() 将文件映射到内存中 - 然后您可以使用传统的指针/内存操作(例如,memset、memcpy 等)在其中使用它,您将如何处理。

      【讨论】:

        猜你喜欢
        • 2014-10-05
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 2013-01-14
        • 2012-04-29
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        相关资源
        最近更新 更多