É dup2 atômico em relação a escreve / lê

0

Digamos que eu tenha um descritor de arquivo 4 que é usado para leitura / escrita com o sinalizador O_APPEND para gravações. Se eu tiver vários threads escrevendo para este arquivo e digamos que periodicamente eu quero mudar o arquivo apontado por fd 4, eu gostaria de fazer uma chamada dup2 para substituir o fd 4 pelo novo arquivo. Enquanto isso, vários segmentos ainda apontarão para o fd 4 para gravação. Estarei perdendo algum dado ou os threads que estão escrevendo erros de rosto durante a troca?

    
por user135284 27.02.2018 / 20:16

1 resposta

1

A man page do Linux e a descrição do POSIX dizem claramente que ela é, na verdade, atômica:

página man do Linux em dup2() :

The steps of closing and reusing the file descriptor newfd are performed atomically.

POSIX, em "Fundamentação" :

On the other hand, the dup2() function provides unique services, as no other interface is able to atomically replace an existing file descriptor.

Eu não vejo nenhum motivo para ser atômico em relação à abertura, fechamento e desduplicação do descritor de arquivo, mas não em relação a leituras ou gravações.

    
por 27.02.2018 / 20:28

Tags