Можно попробовать отключить кэширование записи на диск (в 9х/Ме) - тогда теоретически должно заработать Open/Close. Правда будет притормаживать система, но насколько сильно не знаю. Все покажет практика.
Нужно сохранять слово на диске так, чтобы в случае вырубания света быть максимально уверенным, что это действительно последнее, поступившее значение. В реестре проще всего, но можно ли гарантировать, что это сразу пишется на диск, а не сидит в кэше? Если гарантировать с реестром нельзя, то как это лучше сделать с файлом? Каждый раз open... close?
[Win32] Запись в реестре сразу сохраняется на диске, или? 20.07.01 01:32 Автор: kabanchik Статус: Незарегистрированный пользователь Отредактировано 20.07.01 01:34 Количество правок: 1
> Нужно сохранять слово на диске так, чтобы в случае > вырубания света быть максимально уверенным, что это > действительно последнее, поступившее значение. В реестре > проще всего, но можно ли гарантировать, что это сразу > пишется на диск, а не сидит в кэше? Если гарантировать с > реестром нельзя, то как это лучше сделать с файлом? Каждый > раз open... close?
если будешь писать в рестр, то для принудительной записи тебе придется вызывать ф-ию - RegFlushKey().
можно использовать файл, через API :
HANDLE CreateFile(
LPCTSTR lpFileName, // file name
DWORD dwDesiredAccess, // access mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // SD
DWORD dwCreationDisposition, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to template file
);
---
обрати внимание на dwFlagsAndAttributes , если в нем есть бит FILE_FLAG_NO_BUFFERING, то не будет никакого кеша. вот что написано :
FILE_FLAG_NO_BUFFERING - Instructs the system to open the file with no intermediate buffering or caching. When combined with FILE_FLAG_OVERLAPPED, the flag gives maximum asynchronous performance, because the I/O does not rely on the synchronous operations of the memory manager. However, some I/O operations will take longer, because data is not being held in the cache.
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer multiples of the volume's sector size.
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations should be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). Depending on the disk, this requirement may not be enforced.
One way to align buffers on integer multiples of the volume sector size is to use VirtualAlloc to allocate the buffers. It allocates memory that is aligned on addresses that are integer multiples of the operating system's memory page size. Because both memory page and volume sector sizes are powers of 2, this memory is also aligned on addresses that are integer multiples of a volume's sector size.
An application can determine a volume's sector size by calling the GetDiskFreeSpace function.
> Нужно сохранять слово на диске так, чтобы в случае > вырубания света быть максимально уверенным, что это > действительно последнее, поступившее значение. В реестре > проще всего, но можно ли гарантировать, что это сразу > пишется на диск, а не сидит в кэше? Если гарантировать с > реестром нельзя, то как это лучше сделать с файлом? Каждый > раз open... close?
А для чего же придумали UPS cпрашивается.
Можно сохранять слово 2 раза, тогда при сбое питания можно проверить
не повредились ли данные. А вообще последствия выключения питания предсказать не возможно.
[Win32] Запись в реестре сразу сохраняется на диске, или? 19.07.01 13:12 Автор: prop Статус: Незарегистрированный пользователь
Можно попробовать отключить кэширование записи на диск (в 9х/Ме) - тогда теоретически должно заработать Open/Close. Правда будет притормаживать система, но насколько сильно не знаю. Все покажет практика.
... @#$ тяжело по пьяни в форум писать .. мимо клавишь промахиваешься часто...
.. ну так вот:
короче операционка сама решает когда вызывать функции драйвера а когда отложить их вызов до лучших времен..
есть конечно соответствующие алгоритмы, но это надо документацию по ним раздобыть, софтайсом я думаю за#^&шься раскапывать.
open - close тоже может не подействовать19.07.01 12:03 Автор: _glory_ Статус: Незарегистрированный пользователь
Все дело в том, что операционка сама решает, писать ей файл на диск, или держать его в кэше. И от конкретной функции это не зависит - в конечном счете все дисковые операции - это вызовы соответствующих функций драйвера файловов