Я запутался с fsync
+ direct IO
.
Код легко понять так:
fd = open(filename, O_RDWR, 00644);
write(fd, data, size);
fsync(fd);
В этом случае write()
напишетданные в кеш страницы, и fsync
принудительно переведет все измененные данные в кеше страницы, на которые указывает fd
, на дисковое устройство.
Но если мы откроем файл с флагом O_DIRECT
, например,this,
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
делать здесь?