Criando uma exibição de arquivo

Para mapear os dados de um arquivo para a memória virtual de um processo, você deve criar uma exibição do arquivo. As funções MapViewOfFile e MapViewOfFileEx usam o identificador de objeto de mapeamento de arquivo retornado por CreateFileMapping para criar uma exibição do arquivo ou uma parte do arquivo no espaço de endereço virtual do processo. Essas funções falharão se os sinalizadores de acesso entrarem em conflito com os especificados quando CreateFileMapping criou o objeto de mapeamento de arquivo.

A função MapViewOfFile retorna um ponteiro para a exibição de arquivo. Ao desreferenciar um ponteiro no intervalo de endereços especificado em MapViewOfFile, um aplicativo pode ler dados do arquivo e gravar dados no arquivo. Gravar na exibição de arquivo resulta em alterações no objeto de mapeamento de arquivo. A gravação real no arquivo no disco é tratada pelo sistema. Os dados não são realmente transferidos no momento em que o objeto de mapeamento de arquivo é gravado. Em vez disso, grande parte da entrada e saída do arquivo (E/S) é armazenada em cache para melhorar o desempenho geral do sistema. Os aplicativos podem substituir esse comportamento chamando a função FlushViewOfFile para forçar o sistema a executar transações de disco imediatamente.

A função MapViewOfFileEx funciona exatamente como a função MapViewOfFile , exceto por permitir que um processo especifique o endereço base da exibição do arquivo no espaço de endereço virtual do processo no parâmetro lpvBase . Se não houver espaço suficiente no endereço especificado, a chamada falhará. Portanto, se você precisar mapear um arquivo para o mesmo endereço em vários processos, os processos deverão negociar um endereço apropriado: o parâmetro lpvBase deve ser um múltiplo integral da granularidade de alocação de memória do sistema ou a chamada falhará. Para obter a granularidade de alocação de memória do sistema, use a função GetSystemInfo , que preenche os membros de uma estrutura SYSTEM_INFO .

Um aplicativo pode criar várias exibições de arquivo do mesmo objeto de mapeamento de arquivo. Uma exibição de arquivo pode ter um tamanho diferente do objeto de mapeamento de arquivo do qual é derivado, mas deve ser menor que o objeto de mapeamento de arquivo. O deslocamento especificado pelos parâmetros dwOffsetHigh e dwOffsetLow de MapViewOfFile deve ser um múltiplo da granularidade de alocação do sistema.

Criando uma exibição dentro de um arquivo