Chamadas de memória compartilhada POSIX
As funções de memória compartilhada POSIX focaram no conceito UNIX de que o objeto deve ser um documento ao executar atividades de entrada/saída em uma entidade. Portanto, como você recita e inscreve em uma entidade de memória Posix mútua, o último deve ser considerado como um documento. Um documento mapeado de memória é uma entidade de memória compartilhada POSIX. Para usar o shm_open Função de chamada do sistema abaixo /dev/shm, Documentos de memória compartilhada separados são gerados. Existem apenas duas chamadas de sistema de memória compartilhada dedicadas da Posix, shm_open, e shm_unlink, que estão intimamente relacionados à abertura e desconhecimentos do sistema de arquivos chamadas. O ftruncato, mmap, e Munmap As chamadas da estrutura para documentos são usadas para executar outras tarefas na memória compartilhada POSIX. É necessário conectar um programa que usa chamadas de memória compartilhada POSIX para -lrt.
Os programas usando chamadas de memória compartilhada POSIX devem seguir as seguintes etapas:
Usando shm_open (), formar um objeto de memória compartilhado. O descritor do documento pode ser revertido se a formação do objeto for bem -sucedida.
Com ftruncato (), O tamanho do objeto será corrigido.
Com mapa() e Map_shared, delinear este objeto no presente espaço de endereço.
Leia/escreva a memória compartilhada.
Através da Munmap (), não delinear a memória compartilhada.
Usar fechar() para fechar o objeto.
Através shm_unlink (), Exclua o objeto na memória compartilhada.
shm_open ()
Como descrito acima, shm_open () é usado para gerar um novo objeto de memória compartilhada. Torna o objeto acessível ao procedimento de chamada usando o descritor revertido. A seguir, é apresentada a definição desta chamada de função:
>> int shm_open (const char *nome, int ofLag, modo mode_t);
O primeiro parâmetro é o nome do objeto de memória compartilhado. É uma sequência de terminado nulo do /nome tipo, com a estipulação de que nenhum outro personagem pode ser uma barra além de seu primeiro personagem. Oflag é um pequeno véu criado com várias das bandeiras anteriores por ou O_RDONLY ou O_RDWR. Os parâmetros descritos indicam que seu objeto de memória compartilhada deve ser formada (O_creat) quando ainda não existe e também o objeto está disponível para leitura e escrita (O_RDWR). O último argumento define as aprovações do diretório para o objeto de memória compartilhada.
shm_unlink ()
Shm_unlink () elimina a entidade de memória compartilhada POSIX que foi desenvolvida anteriormente. O descritor de documentos inteiros para o objeto de memória compartilhada é retornada por meio de uma chamada eficaz para shm_open (). Conforme definido sob o shm_open (), O nome do parâmetro é o título da entidade de memória compartilhada. A seguir é a definição do shm_unlink () função:
>> int shm_unlink (const char *nome);
ftruncato ()
Ao definir o objeto, o ftruncato () O método é eliminado para configurar o tamanho da entidade em bytes. A definição da função é a seguinte:
>> int ftruncato (int fd, off_t comprimento);
Ao construir uma memória POSIX compartilhada, é de fato zero bytes em capacidade de tamanho. Você pode renderizar a entidade de memória compartilhada POSIX com bytes de comprimento de tamanho via ftruncato. Ftruncato produz zero na execução. Ftruncato saídas -1 em caso de falha e errno está definido para acionar o erro.
mmap ()
Eventualmente, um documento mapeado de memória com a entidade de memória compartilhada é definida através do mmap () método. Em seguida, ele produz um ponteiro de documento mapeado pela memória que é eliminado para alcançar a entidade de memória compartilhada. A seguir é a definição do mmap () função:
>> void *mmap (void *addr, size_t comprimento, int prot, int sinalizadores, int fd, off_t offset);
Nisso, 'addr' é o endereço para o qual será mapeado. O 'comprimento' é o alcance da entidade de memória compartilhada. Os valores para o ProT podem diferir, mas usaremos a leitura do prot | Prot Write. Existem várias bandeiras, mas o mapa compartilhado é essencial para a memória compartilhada. Agora, 'FD' é um descritor de documentos que foi obtido anteriormente. O deslocamento é o ponto em que o mapeamento começa na entidade de memória compartilhada; O valor de deslocamento 0 também pode ser usado. Após a conclusão, mmap () produz o ponteiro para a posição de mapeamento da entidade de memória compartilhada.
Munmap ()
Na posição direcionada por Addr e obtenção de tamanho, comprimento, Munmap impede o item de memória compartilhada. Munmap rende 0 após a conclusão e -1 na situação de imprecisão; nesse caso, o erro é atribuído para acionar o erro.
>> void munmap (void *addr, size_t comprimento);
Exemplo: remetente e receptor
Vamos dar o exemplo do remetente e do receptor. O remetente criará um novo objeto de memória compartilhada com o nome /SHMEM-Exemplo e inscreva três numerais na memória compartilhada através dele. Agora, o receptor pode expor o objeto de memória compartilhada e recitar os três números da memória. Vamos criar três arquivos com os nomes protocolo.H, remetente.c, e receptor.c.
$ Touch Protocol.h
$ touch remetente.c
$ touch receptor.c
Em seguida, adicionaremos o código -fonte abaixo ao protocolo dos arquivos.H, "remetente.C, 'e' Receptor.c.'Agora, vamos salvar tudo e fechá -los.
Agora estaremos compilando e juntando o código acima usando a palavra -chave -lrt separadamente para o remetente.C e receptor.Arquivo C. Aqui está o comando para fazer isso:
$ gcc -o remetente remetente.C -lrt
$ GCC -O Receptor.C -lrt
Agora, executaremos o código do remetente usando o seguinte comando. A saída é dada abaixo.
$ ./remetente
Executando o código do remetente, o objeto de memória compartilhado foi gerado e pode ser encontrado abaixo /dev/shm Usando o comando abaixo:
$ ls -l /dev /shm | Grep Shmem-Exemplo
Quando executamos o código do receptor, obteremos a saída abaixo:
$ ./receptor
Sempre que a função gm_unlink () é chamado usando o arquivo 'receptor.C, 'o objeto /Dev/shm/shmem-exemplo será destacado. Nesse caso, você não obterá nenhum objeto na saída, como mostrado abaixo.
$ ls -l/dev/shm/shmem -exemplo
Conclusão
Neste artigo, você aprendeu a usar a memória compartilhada POSIX com a programação C no Ubuntu 20.04, incluindo todas as chamadas de função usadas para estabelecer memória compartilhada. Espero que este artigo tenha ajudado você a melhorar seu conhecimento de programação e abordar cada dúvida que você tem sobre este assunto.