• [^] # Re: Tu as raison

    Posté par . En réponse au message accès concurrentiel aux fichiers. Évalué à 6. Dernière modification le 10 mars 2023 à 19:51.

    Quand un programme a ouvert un fichier, il se fiche de savoir s'il est déplacé, même supprimé. Il ne retient que le file descriptor, qui n'est qu'un identifiant d'inode (pour faire simple) et peu importe si le fichier est déplacé ou supprimé.

    Farpaitement ! Jusqu'au moment où tous les fd qui pointent vers l'emplacement sont fermés.

    Petite démo rigolote :

    ~$ cat /dev/random > /tmp/salut & <-- on met des trucs dans un fichier
    [1] 9906
    ~$ rm /tmp/salut <-- on efface le fichier 
    ~$ for i in `seq 1 30`; do df -h /tmp ; sleep 1 ; done <-- on regarde l'espace disque
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 804M 3.1G 21% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 1.1G 2.8G 28% /tmp <-- ça se remplit, pourtant
    Filesystem Size Used Avail Use% Mounted on le fichier /tmp/salut n'existe
    tmpfs 3.9G 1.4G 2.6G 35% /tmp pas !
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 1.6G 2.3G 41% /tmp Mais le process cat y a accès
    Filesystem Size Used Avail Use% Mounted on via un descripteur de fichier :)
    tmpfs 3.9G 1.9G 2.1G 48% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 2.1G 1.8G 55% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 2.4G 1.5G 62% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 2.7G 1.3G 69% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 2.9G 987M 75% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 3.2G 719M 82% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 3.4G 452M 89% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 3.7G 186M 96% /tmp <-- ça chauffe !
    cat: write error: No space left on device
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 3.9G 0 100% /tmp
    [1]+ Exit 1 cat /dev/random > /tmp/salut <-- cat stoppe
    Filesystem Size Used Avail Use% Mounted on <-- et hop plein de place
    tmpfs 3.9G 4.0K 3.9G 1% /tmp de nouveau
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 4.0K 3.9G 1% /tmp
    Filesystem Size Used Avail Use% Mounted on
    tmpfs 3.9G 4.0K 3.9G 1% /tmp
    

    On peut utiliser lsof pour voir le fd et l'inode :

    ~$ cat /dev/random > /tmp/salut &
    ~$ rm /tmp/salut
    [1] 10002
    ~$ lsof -p 10002
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    cat 10002 charles cwd DIR 8,2 12288 6033250 /home/charles
    cat 10002 charles rtd DIR 8,2 4096 2 /
    cat 10002 charles txt REG 8,2 34816 5900785 /usr/bin/cat
    cat 10002 charles mem REG 8,2 3719360 5945566 /usr/lib/locale/locale-archive
    cat 10002 charles mem REG 8,2 1953112 5901580 /usr/lib/libc.so.6
    cat 10002 charles mem REG 8,2 216192 5901565 /usr/lib/ld-linux-x86-64.so.2
    cat 10002 charles 0u CHR 136,1 0t0 4 /dev/pts/1
    cat 10002 charles 1w REG 0,35 2362441728 4127 /tmp/salut (deleted)
    cat 10002 charles 2u CHR 136,1 0t0 4 /dev/pts/1
    cat 10002 charles 3r CHR 1,8 0t0 8 /dev/random
    

    Bon au départ je voulais juste faire un peu d'humour avec mon commentaire débile hein :).