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

Réseau C Discussion :

Fichiers ouverts par un processus


Sujet :

Réseau C

  1. #1
    Membre averti
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Par défaut Fichiers ouverts par un processus
    Bonjour à tous,

    J'aimerais savoir s'il existe un moyen simple de connaitre les fichiers (peu importe la forme, un chemin ou autre) ouverts par un processus avec la libc sous Linux.
    À partir d'un pid, ou un pgid dans l'idéal.

    La question est simple, la réponse l'est peut-être un peu moins…

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,
    si tu es sous linux, tu peux accéder à ses informations simplement en parcourant la liste de fichiers ouverts par un processus dans /proc/PID/fd/Par exemple, avec un simple ls peut donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ ls -l /proc/1750/fd/
    total 0
    lr-x------ 1 fred fred 64 May 13 17:33 0 -> /dev/null
    lrwx------ 1 fred fred 64 May 13 17:33 1 -> /dev/pts/3
    lrwx------ 1 fred fred 64 May 13 17:33 2 -> /dev/pts/3
    lrwx------ 1 fred fred 64 May 13 17:33 3 -> socket:[24699]
    lrwx------ 1 fred fred 64 May 13 17:33 4 -> anon_inode:[eventfd]
    lrwx------ 1 fred fred 64 May 13 17:33 5 -> socket:[24701]
    lrwx------ 1 fred fred 64 May 13 17:33 6 -> anon_inode:[eventfd]
    lrwx------ 1 fred fred 64 May 13 17:33 7 -> socket:[24702]
    lrwx------ 1 fred fred 64 May 13 17:33 8 -> /dev/dri/card0
    lrwx------ 1 fred fred 64 May 13 17:33 9 -> socket:[22801]
    Il faut avoir suffisamment de droits évidemment …
    Si c'est le processus qui veut avec des infos sur lui-même tu peux y accéder facilement par /proc/self/fd

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 451
    Par défaut
    Bonjour,

    Depuis le shell, il existe la commande « lsof » (LiSt Open Files) qui sert à cela. Elle te renvoie par défaut la liste de tous les fichiers ouverts mais il est possible de lui spécifier un PID et d'autres options.

    Depuis un programme C, il me semble (sans être catégorique) que cette commande s'appuie directement sur le contenu de /proc, dont la raison d'être initiale est justement de regrouper toutes les informations concernant chaque processus. Derrière « /proc/<pid>/fd/ » se trouve une liste de liens symboliques représentant tous les descripteurs de fichiers actuellement en possession du processus concerné, et pointant les fichiers associés, y compris lorsqu'il s'agit de sockets ou de tubes anonymes. Dans ces derniers cas, la cible du lien décrit bien ce à quoi le fd correspond, mais le lien en lui-même est orphelin.

    Edit : crosspost avec picodev.

  4. #4
    Membre averti
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Par défaut
    Ben je me doutais que en allant piocher dans /proc j'y arriverais mais, aucun autre moyen plus simple n'est possible ? J'aimerais assez que cela soit portable entre différentes implémentations d'UNIX. Surtout que sur BSD /proc n'existe pas....

  5. #5
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Citation Envoyé par dodo285 Voir le message
    Bonjour à tous,

    J'aimerais savoir s'il existe un moyen simple de connaitre les fichiers (peu importe la forme, un chemin ou autre) ouverts par un processus avec la libc sous Linux.[...].
    Citation Envoyé par dodo285 Voir le message
    Ben je me doutais que en allant piocher dans /proc j'y arriverais mais, aucun autre moyen plus simple n'est possible ? J'aimerais assez que cela soit portable entre différentes implémentations d'UNIX. Surtout que sur BSD /proc n'existe pas....
    Fallait pas parler de linux dans le premier post !

    Tu veux un truc portable ? Je dirais en première approche d'y aller*à coup de #define et ou de discrimination au runtime pour tuner une fonction qui fera un accès à /proc sous linux, un exec* de procstat -f sur bsd, un lsof là où il est dispo, etc …

    Ce sont des informations très particulières spécifiques à chaque OS et non standardisées ni en C11, ni en POSIX ou autre SuS, du moins à ma connaissance.

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/08/2010, 19h49
  2. Copie de fichier ouvert par un autre processus
    Par L_Art_Ment dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 22/07/2010, 23h17
  3. Réponses: 8
    Dernier message: 10/05/2008, 19h10
  4. [C#][VS2003] Détecter 1 fichier utilisé par un processus
    Par gregos dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/11/2005, 15h37
  5. Nombre maximum de fichiers ouverts par processus
    Par galinoo dans le forum Windows
    Réponses: 3
    Dernier message: 27/10/2004, 17h47

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