IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

La fermeture d'un descripteur de fichier est-elle indispensable ?


Sujet :

Shell et commandes GNU

  1. #1
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut La fermeture d'un descripteur de fichier est-elle indispensable ?
    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
    Citation Envoyé par Flodelarab
    Bonjour,
    [...]
    Faut-il fermer un descripteur en général ?
    Que ce passe-t-il si on ne le fait pas ?
    Faut-il fermer le descripteur dans le code que tu donnes ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    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.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    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 ?

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    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 ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par disedorgue
    Comment peut-on écrire sur le &3 d'un process sachant que celui-ci est propre au dit process ainsi qu'à ces fils ?
    vu que c'est un fichier comme un autre sous /proc/$$/fd/, j'ai posé la question...

    Citation Envoyé par disedorgue
    A quoi vous jouez ?
    que veux-tu dire ?

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    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):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exec 3<toto
    rm toto
    bla bla <&3 >toto
    Est-ce le cas ???

  7. #7
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Un petit test assez parlant:
    Xterm 1:
    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)$
    xterm 2:
    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)$
    Dans chacun de ces xterm, le prompt est heure(du xterm)$.
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/06/2010, 11h26
  2. La migration à access 2007 est-elle indispensable ?
    Par Kameron dans le forum Sondages et Débats
    Réponses: 3
    Dernier message: 23/10/2008, 19h54
  3. La fonction à la fermeture d'un fichier est exécutée 2 fois...
    Par Pierre Fauconnier dans le forum Access
    Réponses: 4
    Dernier message: 27/04/2006, 14h14
  4. Macro dans excel permettant de voir si un fichier est ouvert
    Par VirginieGE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2004, 07h51
  5. Descripteur de fichier
    Par Zazeglu dans le forum C
    Réponses: 22
    Dernier message: 15/09/2003, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo