INFO: FILE_FLAG_WRITE_THROUGH y FILE_FLAG_NO_BUFFERING

Seleccione idioma Seleccione idioma
Id. de artículo: 99794 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Resumen

El indicador FILE_FLAG_WRITE_THROUGH para CreateFile() hace que las escrituras realizadas en dicho identificador se escriben directamente en el archivo sin que se va a almacenar en búfer. Los datos se almacenan en caché (almacenados en la caché de disco); sin embargo, todavía está escrito directamente en el archivo. Este método permite que una operación de lectura en los datos para satisfacer la solicitud lectura de datos en caché (si aún sigue allí), en lugar de tener que un archivo leerá para obtener los datos. La llamada de escritura no vuelve hasta que los datos se escriben en el archivo. Esto se aplica a escrituras de remotos--el redirector de red pasa el indicador FILE_FLAG_WRITE_THROUGH al servidor para que el servidor no sepa para satisfacer la solicitud de escritura hasta que los datos se escriben en el archivo.

El FILE_FLAG_NO_BUFFERING se toma este concepto, un paso más y se elimina todos los búfer de archivo de lectura anticipada y caché de disco así, por lo que se garantiza que todas las lecturas proceder desde el archivo y no desde cualquier búfer del sistema o la caché de disco. Cuando se utiliza FILE_FLAG_NO_BUFFERING, lecturas de disco y escribe debe realizarse en los límites del sector y direcciones de búfer deben estar alineadas en límites de sector de disco en la memoria.

Estas restricciones son necesarias porque el búfer que pasar a la lectura o escritura de API se utiliza directamente para E/s en el nivel de dispositivo; en ese nivel, el búfer de direcciones y sector tamaños deben cumplir las restricciones de alineación de procesador y los medios del hardware que está ejecutando en.

Más información

El CDFS de Windows 95 (sistema de archivos de CD-ROM) no admite el marcador FILE_FLAG_NO_BUFFERING para CreateFile(). Mientras un FSD de 95 Windows, como VFAT, puede implementarlo, FILE_FLAG_NO_BUFFERING no es un indicador necesario para los controladores del sistema de archivos y no es compatible con CDFS.

Este fragmento de código muestra cómo alinear-sector de los datos en un búfer y pasarla a 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);

				
puntero p es sectores alineados y señala en el búfer.

Si dispone de una situación donde desee vaciar todos los archivos de la actual unidad lógica, esto puede hacerse:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
este método hace que todos los datos almacenados en búfer de escritura todos los archivos abiertos en la partición C: se vacían y escribir en el disco. Observe que cualquier búfer hace algo distinto que el sistema no está afectado por este vaciado; cualquier archivo posible búfer que el tiempo de ejecución C está haciendo en archivos abiertos con las rutinas de tiempo de ejecución C no se ve afectado.

Al abrir un archivo remoto a través de la red, el servidor siempre almacena en caché y no omite el ningún indicador de almacenamiento en búfer especificado por el cliente. Esto es así por diseño. El redirector y el servidor no pueden implementar correctamente la semántica completa de FILE_FLAG_NO_BUFFERING en la red. En concreto, no pueden cumplirse los requisitos de E/s de tamaño de sector, sectores alineados. Por lo tanto, cuando una aplicación basada en Win32-solicita FILE_FLAG_NO_BUFFERING, el redirector y servidor tratan como una solicitud para FILE_FLAG_WRITE_THROUGH. El archivo no se almacena en caché en el cliente, escrituras vaya directamente al servidor y el disco en el servidor y los tamaños de lectura y escritura en la red son exactamente lo que pide la aplicación. Sin embargo, el archivo se almacena en caché el servidor.

No almacenar en caché al cliente, puede tener un efecto diferente, dependiendo del tipo de E/s. Elimina las visitas de caché o lectura anticipada, pero también puede reducir el tamaño de transmite y recibe. En general, una e/s secuencial, es una buena idea en caché en el cliente. Para acceso aleatorio, pequeño E/s, generalmente es mejor no en caché.

Propiedades

Id. de artículo: 99794 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 4.2
La información de este artículo se refiere a:
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • the operating system: Microsoft Windows XP
Palabras clave: 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 99794

Enviar comentarios

 

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