Forum Programmation.c Comment savoir si un fichier est ouvert par un process ?

Posté par  (site web personnel) .
Étiquettes : aucune
0
16
juil.
2004
Là je suis en train de sombrer dans un trou béant de culture : comment faire, connaissant un fichier, pour savoir si un quelconque process a un descripteur de fichier dessus ?
Je n'ai même pas besoin de savoir qui a ce @#! de descripteur, je veux juste savoir si ce fichier est ouvert.

Ma problématique globale est la suivante : avec fam, je monitore les créations de fichiers dans un répertoire pour déclencher des traitements sur ces fichiers. Cependant avant de balancer ces traitements, j'aimerais être sûr que le fichier est complet.

Merci d'avance.
  • # .

    Posté par  (site web personnel) . Évalué à 4.

    essaye 'fuser le_fichier'
    • [^] # Merci quand même

      Posté par  (site web personnel) . Évalué à 1.

      je suis allé regarder le source de fuser pour me persuader de l'horrib' vérité (que je refusais d'admettre), fuser ne repose par sur quelques appels systèmes mais sur le scan de /proc ... donc en dehors de /proc point de salut.
      • [^] # Re: Merci quand même

        Posté par  (site web personnel) . Évalué à 2.

        faut voir que dans le kernel il doit probablement y avoir une table des processus et pour chaque processus probablement une table des fichiers ouverts ; ils ne vont probablement pas s'amuser a dupliquer l'information et a stocker aussi une table des noms de fichiers (ou bien des inodes mais bon) avec pour chaque entree un lien vers chaque processus qui l'a ouvert.

        tout ca pour dire que scanner proc c'est une maniere (totalement non standard au regard de BSD POSIX et autre SUSv2) de parcourir la table faisant reference dans le kernel a ce qui t'interesse, et qu'il n'y en a pas d'autres mieux "classee" pour ton besoin je pense.
  • # lsof

    Posté par  (site web personnel) . Évalué à 4.

    Regarde du côté de lsof.

    /usr/sbin/lsof /path/to/file devrait normalement lister les processus qui ont un descripteur de fichier sur /path/to/file.

    man lsof pour plus d'informations.
    • [^] # Re: lsof

      Posté par  . Évalué à 3.

      lsof qui est d'ailleurs très très bien pour retrouver le vilain process planté (ou non) qui t'empêche de démonter ton périphérique (coup classique sur ma Mandrake: fam que je dois presque systématiquement exterminer pour démonter CD/DVD/Clé/CompactFlash etc...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.