【问题标题】:Difference between read and seek (Random Access)读取和查找之间的区别(随机访问)
【发布时间】:2020-04-16 08:33:27
【问题描述】:

我不太明白 read 和 seek 的区别是什么。我的教授说 seek 是 read 的更高级版本,它将“运动与操作”分开。但不幸的是,我不太清楚这意味着什么。

我还有一个模糊的概念,即 seek 移动当前位置,这样所有未来的读取和写入都将隐式计算与当前位置的偏移量。它是否正确?如果是这样,那么如何寻找替代读操作?他们似乎做不同的事情,但我的笔记说linux使用seek而不是read。

【问题讨论】:

    标签: file random-access


    【解决方案1】:

    read 调用将从“文件”中读取指定数量的字节。我使用“文件”是因为实际目标可以是目录、网络套接字,甚至是由不同程序动态生成的管道。如果目标实际上是我们所知道的文件,通常支持查找,read 调用也会根据它读取的字节数提前偏移的位置。把它想象成播放一首歌,如果你听一分钟并暂停,你就在一分钟内,如果你继续 (read),你将从最后一点继续。如果你想走到歌曲的结尾,你必须听(并等待)歌曲的持续时间,所以操作是 O(n)。

    现在搜索相当于只是将条滚动到您想要的任何位置。它不会在跳转之间读取任何内容。这就是您的教授将运动与手术分开的意思。因此,在文件中跳转是一个 O(1) 操作。显然,这只有在文件支持随机访问时才有可能。存储在硬盘驱动器/SSD 中的文件可以,但磁带(在 Unix 开发期间很常见)不可以。我不确定你的笔记为什么说 Linux 使用 seek 而不是 read。显然,在处理普通文件时,Linux 和其他系统可以使用seek 将偏移量设置为感兴趣的数据并读取它们。例如,MP3 文件上的 ID3v1 标记位于文件的最后 128 字节,因此操作系统会跳转到该位置以显示歌曲信息,如果被告知播放文件,则在返回文件开头之前。但是在读取歌曲信息并播放时,操作系统还是会使用read

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 2011-04-29
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      相关资源
      最近更新 更多