我对fsync
+感到困惑direct IO
。
这样的代码很容易理解:
fd = open(filename, O_RDWR, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,write()
会将数据写入页面缓存,并将fsync
所有修改过的页面缓存中引用的数据强制fd
写入磁盘设备。
但是如果我们打开一个带有O_DIRECT
标志的文件,像这样,
fd = open(filename, O_RDWR|O_DIRECT, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,write()
会绕过页面缓存,直接写入磁盘设备。那么怎么fsync
办呢,. 引用的页缓存中没有脏页fd
。
如果我们打开一个原始设备,会fsync
做什么,
fd = open('/dev/sda', O_RDWR|O_DIRECT, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,我们打开一个原始设备O_DIRECT
,该设备上没有文件系统。在这里做什么sync
?