【发布时间】:2016-12-21 08:06:58
【问题描述】:
如果我的代码执行fd = open("/dev/sdXY", ...) 和pwrite(fd, ...)/pread(fd, ...) 之类的操作,I/O 操作是否会跳过缓冲区或磁盘缓存?假设 /dev/sdXY 是一个未挂载的格式化磁盘分区(ext4、ufs 等)。
我之所以这么问,是因为需要在我正在处理的应用程序中授予连续文件存储空间,并且我读到实现它的唯一方法是执行我所描述的操作。但是,如果这会导致缓冲区、磁盘缓存或其他一些有用功能的丢失,我可能会不再需要连续存储。
我也很困惑是否需要重新实现低级别的东西,因为分区已经用文件系统格式化了。我读到RAW磁盘/分区就是这种情况。我已经知道需要处理哪些块是空闲的或正在使用的、文件和文件夹结构等,我已经在努力了。
另一个问题:在阅读fopen()/fread()/fwrite() 和 C++ 的文件流时,我只看到了一些关于缓冲区的内容。与 open/write/read/pwrite/pread/etc 不同,只有这些流和 f* 系列函数具有某种缓冲区,对吗?这个缓冲区与磁盘缓存相同还是不同?
最后一个:HDD缓存是由自己的驱动器处理还是由文件系统(ext4、ufs等)处理?
【问题讨论】:
标签: c caching filesystems