INFO : FILE_FLAG_WRITE_THROUGH et FILE_FLAG_NO_BUFFERING

Traductions disponibles Traductions disponibles
Numéro d'article: 99794 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Résumé

L'indicateur FILE_FLAG_WRITE_THROUGH CreateFile() génère des écritures apportées à ce handle à écrire directement dans le fichier sans être mises en mémoire tampon. Les données sont mises en cache (stockées dans le cache disque); toutefois, il est toujours écrit directement dans le fichier. Cette méthode permet une opération de lecture sur ces données pour satisfaire la demande de lecture de données mises en cache (s'il s'agit toujours là), plutôt que de devoir faire un fichier lire pour obtenir les données. L'appel d'écriture ne renvoie pas jusqu'à ce que les données sont écrites dans le fichier. Cela s'applique aux écritures distants ainsi--le redirecteur réseau transmet l'indicateur FILE_FLAG_WRITE_THROUGH sur le serveur pour que le serveur connaît ne pas pour satisfaire la demande d'écriture jusqu'à ce que les données sont écrites dans le fichier.

Le FILE_FLAG_NO_BUFFERING prend plus cette étape un concept et élimine tous fichier lecture anticipée tampon et la mise en cache disque, afin que toutes les lectures sont forcément viennent à partir du fichier et pas de n'importe quel tampon système ou le cache disque. Lorsque vous utilisez FILE_FLAG_NO_BUFFERING, disque lit et écrit doit être effectuée sur des limites de secteur et adresses de mémoire tampon doivent être alignés sur disque des limites de secteur dans la mémoire.

Ces restrictions sont nécessaires car la mémoire tampon que vous passer à la lecture ou écrivez API est utilisé directement d'E / S au niveau du périphérique ; ce niveau, les adresses de mémoire tampon et secteur tailles doivent satisfaire des restrictions Alignement processeur et de support du matériel que vous exécutez sur.

Plus d'informations

Le CDFS 95 Windows (système de fichiers CD-ROM) ne prend pas en charge l'indicateur FILE_FLAG_NO_BUFFERING pour CreateFile(). Tant qu'un FSD Windows 95, tels que VFAT, peut implémenter, FILE_FLAG_NO_BUFFERING n'est pas un indicateur requis pour les pilotes du système de fichiers, et qu'elle n'est pas prise en charge par le CDFS.

Ce fragment de code montre comment aligner le secteur de données dans une mémoire tampon et passer à 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);

				
le pointeur p est aligné de secteur et points dans la mémoire tampon.

Si vous disposez d'une situation où vous souhaitez vider toutes les fichiers du lecteur logique en cours, il est possible en :
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
cette méthode provoque toutes les données mis en mémoire tampon d'écriture pour tous les fichiers ouverts sur la partition C: pour être vidé et écrit sur le disque. Notez que n'importe quel tampon effectuée par tout autre que le système n'est pas affecté par ce vidage ; les fichiers possibles tampon que la C exécution se fait sur les fichiers ouverts avec les routines d'exécution C est inchangés.

Lors de l'ouverture un fichier distant sur le réseau, le serveur met en cache toujours et n'ignore aucun indicateur de mise en mémoire tampon spécifié par le client. Ce comportement est voulu par la conception même du produit. Le redirecteur et le serveur ne peut pas implémentent correctement la sémantique de FILE_FLAG_NO_BUFFERING complet sur le réseau. En particulier, les besoins de taille de secteur, Alignement de secteur d'E / S ne peut pas être remplis. Par conséquent, lorsqu'une application basés sur Win32 demande FILE_FLAG_NO_BUFFERING, le redirecteur et le serveur traitent ce sous la forme d'une demande pour FILE_FLAG_WRITE_THROUGH. Le fichier n'est pas mis en cache sur le client, écritures accédez directement au serveur et sur le disque sur le serveur et les tailles en lecture/écriture sur le réseau sont exactement demande de l'application. Toutefois, le fichier est mis en cache sur le serveur.

Non mise en cache le client peut avoir un effet différent, selon le type d'E / S. Vous éliminez les présences dans le cache ou lire directement, mais vous pouvez également réduire la taille de transmet et reçoit. En règle générale, pour les e / S séquentielles, il est judicieux au cache sur le client. Pour petite, aléatoire accès e / S, il est souvent préférable pas au cache.

Propriétés

Numéro d'article: 99794 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 4.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Win32 Application Programming Interface sur le système suivant
    • 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
Mots-clés : 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 99794
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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