O `cp --no-clobber` é vulnerável à condição de corrida?

O `cp --no-clobber` é vulnerável à condição de corrida?

A página de manual paracp(1)diz

--no-clobbernão sobrescreva um arquivo existente

Porém, o seguinte cenário não seria possível?

  1. cpverifica a existência do arquivo, vamos assumir que o arquivo não existe (ainda)
  2. Algum outro processo grava no mesmo caminho, então agora há dados gravados no arquivo anteriormente não existente
  3. Como cpnão tem conhecimento do arquivo existente, ele sobrescreve os dados

É cp --no-clobbervulnerável a esta condição de corrida? E se não, como cpevitar a situação acima?

Responder1

cpnão é vulnerável a esta condição de corrida. Quando --no-clobberconfigurado, verifica se o destino já existe; se determinar que não, e deve, portanto, prosseguir com a cópia, ele lembra que deve copiar para um novo arquivo. Quando chegar a hora de abrir o arquivo de destino,ele abre com sinalizadores que impõem sua criação,O_CREATeO_EXCL; o sistema operacional verifica se o arquivo não existeao abri-loe falha ( EEXIST) se isso acontecer.

informação relacionada