OVH Cloud OVH Cloud

file clobbering

3 réponses
Avatar
fr
Bonjour,

Comment est configuré le file clobbering?
Pouvez-vous m'aider?
merci.

3 réponses

Avatar
Stephane Chazelas
2005-05-05, 17:11(+02), fr:
[...]
Comment est configuré le file clobbering?
[...]


Je pense que par "file clobbering", tu endends le fait qu'ouvrir
un fichier en O_WRONLY|O_CREAT, va effacer (clobberer) un
fichier qui pouvait eventuellement etre la avant avec le meme
nom.

Chez les Unix modernes, les flags d'open peuvent aussi
comprendre O_EXCL qui fait qu'open echouera si le fichier existe
deja.

Certaines applications refletent ca par un "setting" interne.
Par exemple, un shell, si on lui dit "set -C" ou "set -o
noclobber", fera en sorte que tous les fichier qu'*il* ouvrira
en ecriture aura ce flag (ca n'affecte pas les commandes qu'il
lance).

Dans:

set -C
cat fichier1 > fichier2

fichier1 sera ouvert en ecriture par le shell que s'il n'existe
pas deja. S'il existait, la commande echouera et la commande cat
ne sera meme pas executee. Par contre, cp fichier1 fichier2
n'est pas affecté par ce setting car c'est "cp" et non le shell
qui ouvre le fichier.



--
Stéphane

Avatar
Nicolas George
Stephane Chazelas wrote in message
:
Je pense que par "file clobbering", tu endends le fait qu'ouvrir
un fichier en O_WRONLY|O_CREAT, va effacer (clobberer) un
fichier qui pouvait eventuellement etre la avant avec le meme
nom.


Euh, non, je ne crois pas, pas en l'absence du flag O_TRUNC.

Accessoirement, c'est bien une troncature, pas un effacement. Si c'était un
effacement, un autre process ayant un fd ouvert sur le fichier pourrait
encore accéder à son contenu.

Avatar
Stephane Chazelas
2005-05-5, 16:08(+00), Nicolas George:
Stephane Chazelas wrote in message
:
Je pense que par "file clobbering", tu endends le fait qu'ouvrir
un fichier en O_WRONLY|O_CREAT, va effacer (clobberer) un
fichier qui pouvait eventuellement etre la avant avec le meme
nom.


Euh, non, je ne crois pas, pas en l'absence du flag O_TRUNC.


En l'abscene d'O_TRUNC, le fichier est overwrité. Avec O_TRUNC
il tronqué avant d'etre overwrité.


Accessoirement, c'est bien une troncature, pas un effacement.


Je distingue effacer (erase) et enlever (remove). Tronquer,
c'est pas forcement au debut du fichier, c'est effacer d'un
point a la fin. Cela dit "effacer", ca peut etre vu comme
remplacer par du blanc, donc je suis d'accord que j'aurais pu
etre plus explicite.

Si c'était un effacement, un autre process ayant un fd ouvert
sur le fichier pourrait encore accéder à son contenu.


Non, si c'etait un enlevement, et ca ne serait pas le meme
fichier meme s'il avait le meme nom.

Maintenant, c'est vrai que les redirections en ecriture en shell
utilisent O_TRUNC (sauf justement avec le noclobber avec
certains shells et avec >> (ou O_APPEND) (avec certains shells
(d'autres (les vieux car O_APPEND n'a pas toujours existé) vont
a la fin du fichier manuellement apres l'ouverture par un
lseek)))

--
Stéphane