请考虑以下代码:
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
是否确实触发了实际的磁盘移动。或者,仅在实际读取或写入时才触发磁盘移动。
寻求磁盘是一个巨大的性能影响,我想知道这种防御性编码实践与性能之间的权衡。
答案 0 :(得分:1)
假设这是一个Windows或Unix类型的系统,一个常规文件,你没有对文件打开标志没什么兴趣,这些功能都不会触发磁盘搜索。
很可能在5秒左右的时间内,包含该新文件数据的缓冲区将被写入磁盘以及发生的所有其他内容。
此外,lseek设置的文件位置是文件的完全虚构属性。它默认控制数据在文件中读取或写入的位置,但有许多功能只是覆盖文件位置。
至于这是不是很好的做法,我认为这不重要。但是,由于多线程,我已经不习惯在写入文件时使用搜索功能。您可能希望优先使用pread和pwrite。