ИНФОРМАЦИЯ: FILE_FLAG_WRITE_THROUGH и FILE_FLAG_NO_BUFFERING

Переводы статьи Переводы статьи
Код статьи: 99794 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Аннотация

Флаг FILE_FLAG_WRITE_THROUGH для CreateFile() заставляет все записи, внесенные в который обрабатывать записан непосредственно в файл без в буфер. В кэширование данных (хранящиеся в кэше диска); Тем не менее он по-прежнему записывается на этот файл. Этот метод позволяет операция считывания данных вместо удовлетворения запроса на чтение из кэшированных данных (если она по-прежнему существует) чем необходимость сделать файл для чтения для получения данных. Вызов записи не Возврат до записи данных в файл. Это относится к удаленной записи а также--сетевой перенаправитель передает флаг FILE_FLAG_WRITE_THROUGH сервер таким образом, чтобы сервер знает не для удовлетворения запроса записи до данные записываются в файл.

FILE_FLAG_NO_BUFFERING принимает один шаг эта концепция дальнейшего и исключает все буферизации упреждающее чтение файла и кэширования, таким образом, все операции чтения, будет гарантированно берутся из файла, а не из любой системы буфер или дискового кэша. При использовании FILE_FLAG_NO_BUFFERING, диск считывает и Записывает должно производиться по границам сектора и буфер адреса должны быть выровнены по границам сектора диска в память.

Эти ограничения необходимы, поскольку буфер, который передается в чтение или запись API используется непосредственно для ввода-вывода на уровне устройства; в нем уровень, адреса буфера и размеров сектора должны удовлетворять любой процессор носитель выравнивание ограничения и на оборудование.

Дополнительная информация

Поддерживает CDFS Windows 95 (файловая система компакт-диска) Флаг FILE_FLAG_NO_BUFFERING для CreateFile(). При FSD 95 Windows такие как VFAT, возможно его реализации, FILE_FLAG_NO_BUFFERING не является обязательным флаг для файловой системы драйверов, а не поддерживается CDFS.

Этот фрагмент кода демонстрирует сектор выравнивание данных в буфере и Передача CreateFile():
  char buf[2 * SECTOR_SIZE - 1], *p;

  p = (char *) ((DWORD) (buf + SECTOR_SIZE - 1) & ~(SECTOR_SIZE - 1));
  h = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE,
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
      FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING, NULL);
  WriteFile(h, p, SECTOR_SIZE, &dwWritten, NULL);

				
Указатель p выравнивается сектора и указывает в буфере.

Если у вас ситуации, где требуется очистить все открытые файлы на текущего логического диска, это можно сделать:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
Этот метод вызывает все записи с данными для всех открытых файлов на диске C: раздел записаны на диск и записанные на диск. Обратите внимание, что любой буферизации выполнено путем ничего, кроме системы не подвержены списания; Любой Возможно файл буферизации, выполнив c времени выполнения на файлы открыты в c Подпрограммы времени выполнения не влияет.

При открытии удаленного файла в сети, сервер всегда кэширует и не обрабатывает без буферизации флаг, указанный клиентом. Это сделано намеренно. Перенаправитель и сервер не может реализовать надлежащим образом полная семантика FILE_FLAG_NO_BUFFERING по сети. В частности, требования размер сектора, сектора с выравниванием ввода/вывода не может быть удовлетворена. Таким образом когда Win32 - FILE_FLAG_NO_BUFFERING, Перенаправитель запрашивает у приложения и сервер считает этот запрос для FILE_FLAG_WRITE_THROUGH. Файл не является кэширование на стороне клиента, записывает перейти непосредственно на сервер и на диск сервер и размеры чтение и запись в сети, точно что приложение запрашивает. Тем не менее кэшируется на сервере.

Кэширование клиента не может иметь различные эффекты, в зависимости от типа ввода-вывода. Исключить попаданий в кэше или чтения с опережением, но также может снизить размер передает и получает. Как правило, для последовательного ввода-вывода, это хорошая идея кэш на клиентском компьютере. Для небольших произвольного доступа ввода/вывода часто бывает наилучшим образом, не в кэш.

Свойства

Код статьи: 99794 - Последний отзыв: 1 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Win32 Application Programming Interface на следующих платформах
    • Microsoft Windows 98 Standard Edition
    • операционная система Microsoft Windows Millennium Edition
Ключевые слова: 
kbapi kbfileio kbinfo kbkernbase kbmt KB99794 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:99794

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com