Compartilhando descritores de arquivos

1

Se os descritores de arquivo são específicos de cada processo (dois processos podem usar o mesmo descritor de arquivo id para se referir a diferentes arquivos abertos), então como é possível compartilhar descritores de arquivos de transferência (por exemplo, para mmaps compartilhados) sobre soquetes? / p>

Ele depende do kernel sendo mapeado para o mesmo intervalo de endereços numéricos em cada processo?

    
por benjimin 08.03.2018 / 12:48

1 resposta

1

Quando você compartilha um descritor de arquivo em um soquete, o kernel faz a mediação. Você precisa preparar os dados usando as macros cmsg(3) , enviá-las usando sendmsg(2) e receba-o usando recvmsg(2) . O kernel está envolvido nas duas últimas operações e manipula a conversão de um descritor de arquivo para qualquer dado necessário para transmitir o descritor de arquivo e disponibilizar o descritor de arquivo no processo de recebimento.

Como pode o mesmo fd em diferentes processos apontar para o mesmo arquivo? fornece informações úteis. O processo de envio envia um descritor de arquivo que significa algo em relação à sua tabela de descritores de arquivos (privados); o kernel sabe o que é mapeado na tabela de arquivos abertos do sistema e cria uma nova entrada, conforme necessário, na tabela do descritor de arquivos do processo de recebimento.

    
por 08.03.2018 / 14:49