考虑以下代码:
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是否触发了实际的磁盘移动。或者,磁盘移动是否仅在实际读取或写入时触发。
磁盘寻道是一个巨大的性能冲击,我想知道这种防御性编码实践和性能之间的权衡。
发布于 2014-02-26 11:30:11
假设这是一个Windows或Unix类型的系统,一个普通的文件,并且您没有对文件打开标志做任何花哨的操作,这些函数都不会触发磁盘寻道。
很可能在5秒左右,包含新文件数据的缓冲区将被写入磁盘,以及发生的其他所有事情。
此外,lseek设置的文件位置是文件的一个完全虚构的属性。它控制默认情况下数据在文件中的读写位置,但有许多函数只是简单地覆盖文件位置。
至于这是否是良好的实践,我不认为它有多大关系。但是,由于多线程,我已经养成了在写入文件时使用查找函数的习惯。您可能希望按首选项使用扩展和pwrite。
https://stackoverflow.com/questions/22030885
复制相似问题