首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lseek()会触发实际的机械磁盘寻道运动吗?

lseek()会触发实际的机械磁盘寻道运动吗?
EN

Stack Overflow用户
提问于 2014-02-26 11:05:08
回答 1查看 331关注 0票数 2

考虑以下代码:

代码语言:javascript
复制
lseek(fd, 100, 0); /* Seek to the 100th byte in the file fd. */
write(fd, buf, n); /* Write from that position. */
lseek(fd, 0, 0); /* Is this necessary? Will it trigger a actual disk movement? */

我希望lseek回到文件的开头,以防另一行代码继续从该位置编写代码,认为它是从文件的开头开始的。首先,这是一个好的实践吗?第二……

我想知道lseek是否触发了实际的磁盘移动。或者,磁盘移动是否仅在实际读取或写入时触发。

磁盘寻道是一个巨大的性能冲击,我想知道这种防御性编码实践和性能之间的权衡。

EN

回答 1

Stack Overflow用户

发布于 2014-02-26 11:30:11

假设这是一个Windows或Unix类型的系统,一个普通的文件,并且您没有对文件打开标志做任何花哨的操作,这些函数都不会触发磁盘寻道。

很可能在5秒左右,包含新文件数据的缓冲区将被写入磁盘,以及发生的其他所有事情。

此外,lseek设置的文件位置是文件的一个完全虚构的属性。它控制默认情况下数据在文件中的读写位置,但有许多函数只是简单地覆盖文件位置。

至于这是否是良好的实践,我不认为它有多大关系。但是,由于多线程,我已经养成了在写入文件时使用查找函数的习惯。您可能希望按首选项使用扩展和pwrite。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22030885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档