A página de manual paracp(1)
diz
--no-clobber
não sobrescreva um arquivo existente
Porém, o seguinte cenário não seria possível?
cp
verifica a existência do arquivo, vamos assumir que o arquivo não existe (ainda)- Algum outro processo grava no mesmo caminho, então agora há dados gravados no arquivo anteriormente não existente
- Como
cp
não tem conhecimento do arquivo existente, ele sobrescreve os dados
É cp --no-clobber
vulnerável a esta condição de corrida? E se não, como cp
evitar a situação acima?
Responder1
cp
não é vulnerável a esta condição de corrida. Quando --no-clobber
configurado, 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_CREAT
eO_EXCL
; o sistema operacional verifica se o arquivo não existeao abri-loe falha ( EEXIST
) se isso acontecer.