note de modération :
j'ai ouvert cette discussion, et y ai déplacé certains messages, parce que le sujet mérite un fil à part entière, plutôt que d'être masqué par un titre qui n'y ferait pas allusion.
suite à cette discussion
Envoyé par Flodelarab
Discussion :
note de modération :
j'ai ouvert cette discussion, et y ai déplacé certains messages, parce que le sujet mérite un fil à part entière, plutôt que d'être masqué par un titre qui n'y ferait pas allusion.
suite à cette discussion
Envoyé par Flodelarab

en général, oui.
sinon, il ne se passe rien de spécial : il y a un fichier ouvert en écriture (cela peut-il induire un risque si une personne malveillante parvient à s'en servir...?).
quand le processus qui l'a créé (ici, un script) se termine, le descripteur est fermé automatiquement.
Le descripteur est publique ?
Cela veut dire qu'une personne malveillante exécuterait un script en parallèle de celui de Jipété et ce script écrirait sur le &3, par exemple ?
Bonjour,
Comment peut-on écrire sur le &3 d'un process sachant que celui-ci est propre au dit process ainsi qu'à ces fils ?
Comment cela réagi quand un autre process efface le fichier pendant que le process qui l'a ouvert en &3 le manipule ?
PS: A quoi vous jouez ? on peut jouer aussi ?![]()

vu que c'est un fichier comme un autre sous /proc/$$/fd/, j'ai posé la question...Envoyé par disedorgue
que veux-tu dire ?Envoyé par disedorgue
Ok, je retire ma petite pique sur le "à quoi vous jouez"
Concernant les /proc/$$/fd, ce ne sont que des liens sur les fichiers (tout type) qui sont ouvert par le dit process.
Ce qui rejoint ma deuxième question.
Cette discussion me laisse penser que l'on peut remettre en cause la fameuse méthode de modification de fichier sans passer par un fichier temporaire (pseudocode si dessous):
Est-ce le cas ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 exec 3<toto rm toto bla bla <&3 >toto
Un petit test assez parlant:
Xterm 1:
xterm 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 14:28:20(1)$ exec 3<remplissage 14:28:25(1)$ ls -l /proc/$$/fd total 0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 0 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 1 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 2 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 255 -> /dev/pts/0 lr-x------ 1 disedorgue disedorgue 64 29 avril 10:16 3 -> /home/disedorgue/rere/remplissage 14:28:28(1)$ 14:30:21(1)$ wc -l <&3 18361186 14:30:45(1)$ ls -l /proc/$$/fd total 0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 0 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 1 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 2 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 255 -> /dev/pts/0 lr-x------ 1 disedorgue disedorgue 64 29 avril 10:16 3 -> /home/disedorgue/rere/remplissage (deleted) 14:31:03(1)$ exec 3>&- 14:31:12(1)$ ls -l /proc/$$/fd total 0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 0 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 1 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 2 -> /dev/pts/0 lrwx------ 1 disedorgue disedorgue 64 29 avril 10:16 255 -> /dev/pts/0 14:31:14(1)$
Dans chacun de ces xterm, le prompt est heure(n° du xterm)$.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 14:28:46(2)$ wc -l <remplissage 18361186 14:28:52(2)$ sed -i '100000d' remplissage 14:30:12(2)$ wc -l <remplissage 18361185 14:30:19(2)$
Comme on peut le voir, au départ, le fichier est ouvert sur le FD 3 dans le xterm 1
Xterm2:
-On voit qu'il fait 18361186 lignes.
-On lui supprime la 100000éme ligne.
-On controle qu'il fait bien 18361185 lignes.
Xterm1:
-On controle le nombre de ligne (après avoir supprimé la 100000ème ligne dans xterm2), et on retrouve bien les 18361186 lignes (le nombre avant suppression de la ligne).
La modification faite par le xterm2 ne semble pas avoir d'effet sur le process en cours du xterm1
Par contre, une fois que le traitement est terminé, il est plus propre de fermer le FD car comme on peut le voir, il est juste marqué comme (delete) mais reste présent.
Partager