Função msync 2 c

Função msync 2 c
Você já ouviu falar de alguma função utilizando e gerenciando a memória de um sistema no Linux? A função msync () é uma delas. O método sincroniza o conteúdo do arquivo com o conteúdo atual da área. Foi amplamente conhecido entre os usuários do Linux para sincronizar a memória com o armazenamento físico de um sistema. Neste artigo, explicaremos sua sintaxe e uso. Para isso, passaremos por cada um de seus argumentos um por um.

Sintaxe:

#incluir
Int msync (void * addr, size_t len, int sinalizadores);

Addr: O início dos endereços que você deseja sincronizar como um intervalo.

Len: O número do comprimento dos locais expressos em bytes.

Explicação:

Dentro dessas páginas completas que compreendem qualquer parte do espaço de endereço do processo, começando no endereço e executando bytes de comprimento, o método msync () deve escrever todas as informações atualizadas para áreas de armazenamento persistentes. Msync () não deve ter impacto se não houver essa memória. O método msync () removerá os backups armazenados de informações, se necessário. AddR deve ser um múltiplo do número de páginas fornecidas pela função sysconf () para a implementação funcionar.

O método MSYNC (*) deve garantir que todos os processos de gravação sejam concluídos conforme necessário para a integridade sincronizada de segurança de dados de E/S para mapeamentos para documentos. A implementação pode opcionalmente escrever características adicionais do arquivo, embora isso não seja definido. Quaisquer dados atualizados não devem ser transferidos para o objeto principal ou disponibilizados gratuitamente para outras operações sempre que o método msync () for realizado nas traduções MAP_Private. Não se sabe onde as informações nas traduções map_private são armazenadas permanentemente. [Shm | tym] [escolha de escolha] msync () não especifica se isso afeta os objetos de memória compartilhados ou os objetos de armazenamento digitados.

Fim da opção: Se uma solicitação para o mapa não foi usada para criar a tradução, a funcionalidade deste método é indefinida.

Opções de sinalização disponíveis para Msync ()

O parâmetro de opções é composto pelo bit-bit-Inclusive ou de várias bandeiras listadas nos seguintes que são especificados no arquivo de cabeçalho “SYS/MMAN.H ”:

  • Ms_async: Realizar escrita simultânea
  • Ms_invalidate: Mapeamentos imprecisos
  • Ms_sync: Realizar escrita simultânea
  • Ms_cache_only: Como atualmente o QNX Neutrino suporta a compatibilidade do POSIX para documentos mapeados de memória, o MSYNC () realiza o objetivo desejado de escrever modificações na memória traduzida de volta ao arquivo real. Somente Cache da MS (adição qnx neutrino; QNX Neutrino Core OS 6.3.2 ou superior). Se você preferir a adição do QNX Neutrino ao comportamento padrão do POSIX, use esse bit para instruir o método para liberar ou saturar o cache de dados (através do MS ASYNC, MS SYNC ou MS INVALIDA.
  • Se você estiver alterando dinamicamente o código, use a extensão de neutrino QNX MS invalidar o icache para garantir que o código atualizado seja o que é executado.
  • Somente trabalhe em páginas limpas com a extensão de neutrino QNX MS_CLEAN (versão 7.0 ou mais tarde).

Antes da solicitação, todos os links de gravação para a memória do sistema eram acessíveis aos processos de leitura seguinte no documento. Não está claro se os ponteiros de leitura para a área de armazenamento podem acessar as modificações na mesma área do documento que foi feita antes mesmo da solicitação. Se as páginas inalteradas dentro do intervalo específico forem adicionalmente escritas no hardware fundamental, isso não é mencionado. Quando todos os processos de gravação estão agendados, o método poderá responder imediatamente se a bandeira for ms_async. Quando as bandeiras são ms_sync, o método de alguma forma não retorna, a menos que todos os processos de gravação sejam concluídos.

Ao sincronizar os dados da região de armazenamento com as informações existentes armazenadas, o MS_Invalidate os torna coincidentes. Acesso sucessivo de leitura à área de armazenamento vinculada pode ver todas as gravações na área traduzida do documento que foi feita antes da solicitação. Não está claro se as dicas de leitura para as áreas de armazenamento que foram traduzidas para a mesma área do documento utilizando o map_shared mesmo antes de chamar qualquer função seria capaz de ver a área. As colunas ST_CTime e ST_Mtime do arquivo são sinalizadas para atualizar se o uso da função msync () resultar em qualquer operações de gravação realizadas no diretório.

Valor retornado:

  • A função msync () produz 0 se for concluída.
  • A função msync () emite -1 e atribui um errno a um dos seguintes parâmetros de erro se falhar.

Uso do aplicativo:

O método msync () não precisa ser acessível em todas as variantes, pois só é permitido se os documentos mapeados de armazenamento e as opções de entrada e saída coordenadas forem fornecidas. Os aplicativos que precisam de um objeto de armazenamento estão em uma posição definida, como aqueles que fornecem instalações de transação, devem utilizar o método msync (). As páginas podem ser transferidas para o disco durante a atividade de rotina do sistema.

Não há certeza de que o msync () parece ser o único fator que influencia se as páginas são ou não transferidas para o disco. O método msync () envia os dados de uma área mapeada para o armazenamento persistente da entidade base. A integridade dos dados do documento é garantida pela solicitação ao MSYNC (). Se de alguma forma o sinalizador MS_Invalidate foi fornecido, quaisquer dados armazenados poderão ser expirados quando os dados são redigidos. Nas plataformas que não fornecem integridade de leitura/gravação, isso é útil.

Exemplo:

Criamos um novo arquivo C usando a instrução Vim no shell. Ele é criado dentro da pasta Project1 do nosso sistema Kali Linux, conforme a saída da lista “LS” da lista na imagem a seguir, i.e. “MySync.C ”.

Para abrir este arquivo, usamos o editor do VIM conforme a seguinte instrução:

O arquivo vazio é aberto dentro do editor Vim do nosso sistema. Adicionamos os cabeçalhos necessários neste arquivo de código primeiro. O stdio.h, unistd.h e corda.h são usados ​​para obter a entrada e saída padrão. Enquanto o uso de “sys/mman.h ”e fcntl.h são usados ​​para utilizar a função msync () e arquivos no código. A função principal () inicializa o valor do descritor de arquivo para -1 e recebe o tamanho da página usando a função getPagesize (). Abrimos o “NewFile.arquivo txt ”no modo de leitura e gravação. Se não houver arquivo com este nome, a opção "O_Create" cria uma nova.

O valor retornado é armazenado no descritor de arquivo e a declaração "se" utiliza -a para ver se o valor é menor que 0 ou não. Nesse caso, ele imprimirá que a “abertura do arquivo falhou”. O ponteiro map_address é usado para mapear o endereço de um arquivo e, se falhar, a instrução "se" imprimirá a respectiva mensagem de erro. A função strcpy () está aqui para copiar uma string para uma variável map_address e a instrução "if-else" usa a função msync () para sincronizar a memória mapeada com o arquivo e exibir a respectiva saída, i.e. falhou ou conseguiu.

Compilamos este arquivo C com o compilador GCC e criamos seu arquivo de objeto. Em seguida, executamos seu arquivo de objeto e recebemos a mensagem de que a memória mapeada foi sincronizada com sucesso com o arquivo.

Conclusão

É tudo sobre o uso do MSYNC () 2 função de C em nosso sistema. Discutimos sua sintaxe junto com seu parâmetro, separadamente. Também discutimos as opções usadas nele e os erros que podemos obter de sua falha. Adicionamos um exemplo detalhado para explicar seu uso na linguagem de programação C.