Вам нужно вызвать fdatasync (или fsync, если вам действительно нужны синхронизированные метаданные) и подождать, пока он вернется.
Вы можете сделать это из другого потока, но если один поток записывает в файл, в то время как другой поток выполняет fdatasync (), неясно, какая из записей гарантированно будет постоянной или нет.
Базы данных, которые хотят хранить журналы транзакций гарантированно надежным способом, должны вызвать fdatasync.
Базы данных (такие как innodb) обычно используют прямой ввод-вывод (а также свое собственное кэширование данных, а не полагаются на ОС) в своих основных файлах данных, чтобы они знали, что они будут записаны предсказуемым образом.