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

Unix Discussion :

Savoir qu'un fichier est en cours de copie


Sujet :

Unix

  1. #1
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Savoir qu'un fichier est en cours de copie
    Bonjour, Dans un traitement gérant l'arrivée de fichiers dans un répertoire, j'ai besoin de savoir si un fichier est en cours de copie afin de na pas le traiter avant la fin de sa réception. Cela est-il possible ? D'avance merci.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Ca dépend des Unix mais beaucoup implémentent la commande fuser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ fuser /lib/libc.so
    /lib/libc.so:    15039m   14957m   14956m    3565m    3404m   18197m   24524m   17423m   17421m    3048m    3041m    3034m    3032m     447m     420m     409m     408m     380m     357m     355m     346m     340m     338m     328m     327m     326m     318m     314m     312m     290m     287m     272m     263m     207m     197m     144m     140m     133m     127m      76m      15m      11m       9m       1m
    ɹǝsn *sıɹɐlos*

  3. #3
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Merci, mais je ne suis pas un spécialiste. En quoi cette commande peut me dire si le fichier x est en cours de copie;
    Si le fichier n'est plus en cours de copie, la commande ne retourne rien, c'est cela?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Merci, mais je ne suis pas un spécialiste. En quoi cette commande peut me dire si le fichier x est en cours de copie;
    Si le fichier n'est plus en cours de copie, la commande ne retourne rien, c'est cela?
    fuser te permet de savoir si le fichier est ouvert ou non par un processus (avec les identifiants des processus).
    S'il ne retourne rien, le fichier n'est pas ouvert.

    En fait, tu ne peux pas savoir si un fichier est en cours de copie, car du point de vue du systeme, ca ne veut rien dire
    Comment savoir, algorithmiquement parlant, qu'un fichier est en cours de copie ?

    Par exemple :
    mon processus ouvre le fichier, le lit en entier, ferme le fichier, puis fait une pause, puis l'ecrit : conceptuellement, il fait bien une copie de fichier. Mais une fois qu'il l'a lu et ferme, il ne pourra plus savoir s'il y a des modifications, et donc il n'est pas "en train" de le copier.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre habitué
    Homme Profil pro
    consultant ETL
    Inscrit en
    Septembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : consultant ETL
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2008
    Messages : 97
    Points : 185
    Points
    185
    Par défaut
    Si tu maîtrise le process qui génère le fichier, tu peux ajouter la création d'un fichier témoin à la fin de ton fichiers de données.
    Et ton programme consommateur est en attente du fichier témoin et non pas du fichier de données.
    Ce principe est également adapté lorsque l'on est en attente de plusieurs fichiers. Cela "flag" l'arrivée et la disponibilité d'un lot de fichiers à traiter.

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    j'ai besoin de savoir si un fichier est en cours de copie afin de na pas le traiter avant la fin de sa réception.
    dans cette optique je pense que j'observerais simplement l’évolution de la taille des fichiers au fil du temps, selon la granularité on peut par exemple envisager un check en cron toutes les minutes, si la taille du fichier n'a pas changé lors du prochain check c'est qu'il n'est pas en cours de copie

    après ça dépend, comme dit si tu as la main sur le serveur (ftp par exemple ?) il est peut-etre possible de lui configurer un répertoire temporaire pour l'upload ou un script qui s'exécute à chaque fin d'upload etc. ce sera forcément plus avantageux comme solution

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    dans cette optique je pense que j'observerais simplement l’évolution de la taille des fichiers au fil du temps, selon la granularité on peut par exemple envisager un check en cron toutes les minutes, si la taille du fichier n'a pas changé lors du prochain check c'est qu'il n'est pas en cours de copie
    Ca n'est pas garanti, il peut y avoir par exemple une saturation réseau qui fait que la taille ne va pas évoluer pendant un temps conséquent ou alors, le processus émettant les données peut le faire de façon discontinue. C'est aussi très long alors que fuser permet de savoir immédiatement si le fichier est en cours d'utilisation, ce qui répond au besoin exprimé (sauf cas tordu décrit par gangsoleil).

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    file="/tmp/toto"
    if [ "$(fuser "$file" 2>/dev/null)" ]; then
        echo "$file est en cours de lecture ou écriture !"
    fi
    ɹǝsn *sıɹɐlos*

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. php fileopen savoir si le fichier est en cours ou pas
    Par mapmip dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 27/05/2015, 17h17
  2. Savoir si un fichier est en cours de copie
    Par SheikYerbouti dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 17/10/2013, 08h12
  3. Savoir si un fichier est déjà en cours d'utilisation
    Par Annaced dans le forum Débuter
    Réponses: 1
    Dernier message: 01/09/2010, 09h41
  4. Comment savoir qu'un fichier est modifie
    Par moniphal dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2005, 10h26
  5. Unix - Comment savoir si un fichier est ouvert
    Par freddyboy dans le forum C
    Réponses: 7
    Dernier message: 06/10/2004, 15h53

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