Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
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
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.
Stephane Chazelas wrote in message
<slrnd7kgvj.5ek.stephane.chazelas@spam.is.invalid>:
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.
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.
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
2005-05-5, 16:08(+00), Nicolas George:
Stephane Chazelas wrote in message
<slrnd7kgvj.5ek.stephane.chazelas@spam.is.invalid>:
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)))
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)))