La page man pour cp(1)
dit
--no-clobber
Ne pas écraser un fichier existant
Cependant, le scénario suivant ne serait-il pas possible?
cp
vérifie l'existence du fichier, supposons que le fichier n'existe pas (encore)cp
n'est pas au courant du fichier maintenant existant, il écrase les donnéesEst cp --no-clobber
vulnérable à cette condition de course? Et sinon, comment cp
évite la situation ci-dessus?
cp
n'est pas vulnérable à cette condition de course. Lorsque --no-clobber
est défini, il vérifie si la destination existe déjà; Si cela détermine cela ne le fait pas, et il devrait donc procéder à la copie, il se souvient qu'il est censé copier dans un nouveau fichier. Lorsque le temps vient d'ouvrir le fichier de destination, il l'ouvre avec des indicateurs qui appliquent sa création , O_CREAT
et O_EXCL
; Le système d'exploitation vérifie ensuite que le fichier n'existe pas tout en ouvrant et échoue (EEXIST
) si cela le fait.