INFO: FILE_FLAG_WRITE_THROUGH e FILE_FLAG_NO_BUFFERING

Traduções de Artigos Traduções de Artigos
Artigo: 99794 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

O sinalizador FILE_FLAG_WRITE_THROUGH para CreateFile() faz com que as escritas efectuadas a esse identificador sejam escritos directamente para o ficheiro sem ser armazenada em buffer. Colocados em dados é cache (armazenados na cache de disco); no entanto, ainda são escrito directamente para o ficheiro. Este método permite uma operação de leitura nesses dados para satisfazer o pedido de leitura de dados em cache (se ainda existe), em vez de ter para executar um ficheiro de leitura para obter os dados. A chamada de escrita não devolve até que os dados são escritos o ficheiro. Isto aplica-se a bem escritas remotos--o redireccionador de rede transmite o sinalizador FILE_FLAG_WRITE_THROUGH para o servidor para que o servidor sabe não para satisfazer o pedido de escrita até que os dados são escritos o ficheiro.

O FILE_FLAG_NO_BUFFERING tem este conceito um passo mais e elimina todos os ficheiros leitura antecipada memória intermédia e disco em cache, para que todas as leituras garantidas que vem a partir do ficheiro e não de qualquer memória intermédia de sistema ou a cache de disco. Quando utilizar FILE_FLAG_NO_BUFFERING, disco lê e escreve deve ser feita no sector de limites e endereços de memória intermédia tem de ser alinhados os limites do sector de disco na memória.

Estas restrições são necessárias porque a memória intermédia que passar para a leitura ou escrita API utilizada directamente para E/s no nível de dispositivo; esse nível, os endereços de memória intermédia e sector tamanhos tem de satisfazer quaisquer restrições de alinhamento de processador e suporte do hardware que estiver a executar no.

Mais Informação

O Windows 95 CDFS (sistema de ficheiros do CD-ROM) não suporta o sinalizador FILE_FLAG_NO_BUFFERING CreateFile(). Enquanto um FSD 95 Windows, tais como VFAT, poderá implementá-la, FILE_FLAG_NO_BUFFERING não é um sinalizador necessário para controladores de sistema de ficheiros e não é suportada por CDFS.

Este fragmento de código demonstra como alinhar sector de dados numa memória intermédia e passá-las para 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);

				
ponteiro p é alinhado no sector e aponta na memória intermédia.

Se tiver uma situação em que pretende limpar todos os ficheiros abertos na actual unidade lógica, pode fazê-lo:
   hFile = CreateFile("\\\\.\\c:", ....);
   FlushFileBuffers(hFile);
				
este método faz com que todos os dados na memória intermédia de escrita para todos os ficheiros abertos na partição C: seja esvaziada e escritas no disco. Note que qualquer memória intermédia efectuada por algo diferente que o sistema não é afectado por esta limpeza; qualquer ficheiro possível memória intermédia que o tempo de execução C está a fazer no ficheiros abertos com rotinas C Run-time é inalterado.

Quando abrir um ficheiro remoto através da rede, o servidor sempre coloca em cache e ignora o sem sinalizador de colocação na memória intermédia especificado pelo cliente. Isto ocorre por predefinição. O redireccionador e servidor não podem implementar correctamente a semântica completa FILE_FLAG_NO_BUFFERING através da rede. Em particular, o requisito de tamanho de sector, alinhado no sector E/s não é possível cumprir. Por conseguinte, quando uma aplicação Win32 baseadas lhe pede para FILE_FLAG_NO_BUFFERING, redireccionador e servidor tratam este como um pedido para FILE_FLAG_WRITE_THROUGH. O ficheiro não colocado em cache no cliente, escritas ir directamente para o servidor e para o disco no servidor e os tamanhos de leitura/escrita na rede são exactamente o que solicita a aplicação. No entanto, o ficheiro é colocada em cache no servidor.

Não colocar em cache o cliente pode ter um efeito diferente, dependendo do tipo de E/s. Eliminar os acertos da cache ou leitura antecipada, mas também pode reduzir o tamanho de transmitir e receber. Em geral, para E/s sequencial, é uma boa ideia à cache no cliente. Para pequeno, aleatório acesso E/s, muitas vezes, é melhor não à cache.

Propriedades

Artigo: 99794 - Última revisão: 21 de novembro de 2006 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • Microsoft Win32 Application Programming Interface nas seguintes 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
Palavras-chave: 
kbmt kbapi kbfileio kbinfo kbkernbase KB99794 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 99794

Submeter comentários

 

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