Как я могу написать что-то в файл на C++ без использования системного кеша и кэша накопителя? Я просто хочу написать точно на hdd независимо от всех настроек системного кеша.Запись файла без кеша системы и hdd
ответ
Если вы не пишете драйвер дискового устройства, вы не можете гарантировать, что не будет никакого кеша или обработки, выполненной с вашей записью.
Библиотека времени C предоставляет fflush(FILE *)
для этого. Windows имеет FlushFileBuffers
, а также флаг, который вы можете передать в CreateFile
(FILE_FLAG_NO_BUFFERING
) (который сам добавляет ограничений на то, что вы можете сделать).
Альтернативой попытке обойти кэширование записи является то, что ваши структуры данных устойчивы к частичной ошибке. Для файлов одним из популярных способов является запись заголовка файла после записи остальной части файла. Предполагая, что Мерфи, а не поведение Макиавелла, этого должно быть достаточно.
Или используйте функции замены или транзакции, предоставленные операционной системой (см. ReplaceFile и Transactional NTFS для Windows).
На самом деле, это даже не защищает от Мерфи. Обычное переупорядочение записи приведет к переупорядочению записей в физическом порядке. Несмотря на то, что заголовок предоставляется последней ОС, он может быть первым, если имеется достаточный буфер. Обратите внимание, что современные диски могут делать это самостоятельно, вне операционной системы. (SATA NCQ) – MSalters
В Linux вы можете передать O_DIRECT
на номер open(2)
, чтобы избежать кэширования ОС, но у вас нет такого же уровня контроля над кешем накопителя.
Это сильно зависит от операционной системы. В Windows вы можете указать FILE_FLAG_NO_BUFFERING, когда вы открываете файл с CreateFile, чтобы отключить системное кэширование. Однако вы не сможете обойти кэширование на жестком диске.
Если вы передадите как 'FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING', Windows сообщит, что диск также будет обходить его кеширование. – MSalters
- 1. эффективная непрерывная запись данных на HDD
- 2. Стиль WPF из файла HDD
- 3. Что означает «Проверяет запись» при стирании hdd?
- 4. чтение/запись файла удаленной системы в javascript
- 5. Создание системы кеша в javascript
- 6. Чтение файла json и запись без отступа
- 7. Чтение и запись файла UNIX без записи
- 8. Скопировать файл без использования кеша окон
- 9. Запись функции кеша в VB.NET
- 10. Чтение и запись раздела файла только файла (без потоков)
- 11. WMI и HDD SMART Data
- 12. запись файла в Java без семантики O_SYNC
- 13. EclipseLink QueryException без кеша
- 14. Carrierwave два файла кеша
- 15. Проверка файла кеша Nginx
- 16. Действия файла файла файловой системы
- 17. Хранение и извлечение кеша JCS из файла
- 18. Symfony2 - Выход из системы и очистка кеша + предупреждение кнопки
- 19. Запись и чтение файла
- 20. Чтение и запись файла
- 21. чтение и запись файла
- 22. Чтение и запись файла
- 23. Запись и чтение файла
- 24. Каков размер кеша и размер строки кеша?
- 25. Инструменты для снижения риска защиты паролем и места простоя HDD
- 26. Как создать таблицу большого кеша без увеличения файла LOG?
- 27. Позвольте пользователю выбрать учетную запись без выхода из системы
- 28. Запись в середину файла (без перезаписи данных)
- 29. Чтение/запись текстового файла без обновления страницы
- 30. ATG RepositoryItem getPropertyValue, без кеша, без транзакции
Это конкретная ОС. – Christopher
Возможно, это поможет, если вы объясните * почему * вы можете это сделать. Другими словами, что вы * на самом деле пытаетесь достичь? –
Я слышал, что некоторые базы данных работают так (поэтому они уверены, что все данные записаны на диск), и мне просто интересно, если это можно сделать в чистом C++. –