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

Linux Discussion :

Récupérer un nom de fichier à partir d'un descripteur


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut Récupérer un nom de fichier à partir d'un descripteur
    Bonjour,
    Dans un programme en C.
    Je voudrais savoir si l'on peut récupérer le nom d'un fichier temporaire à partir du descripteur de fichier que me renvoie la fonction qui crée le fichier temporaire ?
    Le descripteur que la fonction me renvoie est un int je voudrais pouvoir récupérer le nom du fichier pour faire un unlink depuis le main et non depuis la fonction qui crée le fichier. Je vous donne la déclaration de la fonction :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef int handle_temp;
     
    handle_temp ecrire_temp (char * buffer, size_t length)

    Je pourrais faire en sorte qu'elle me renvoie le nom du fichier mais je n'aurais plus le descripteur et je ne pourrais plus utiliser l'appel read.

    si quelqu'un a une idée merci d'avance...

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par PyNub Voir le message
    Bonjour,
    Dans un programme en C.
    Je voudrais savoir si l'on peut récupérer le nom d'un fichier temporaire à partir du descripteur de fichier que me renvoie la fonction qui crée le fichier temporaire ?
    Le descripteur que la fonction me renvoie est un int je voudrais pouvoir récupérer le nom du fichier pour faire un unlink depuis le main et non depuis la fonction qui crée le fichier. Je vous donne la déclaration de la fonction :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef int handle_temp;
     
    handle_temp ecrire_temp (char * buffer, size_t length)

    Bonjour
    Non tu ne peux pas récupérer un nom depuis un descripteur. Parce que, théoriquement, le descripteur est créé depuis un nom et que tu es sensé déjà avoir ce nom.

    Citation Envoyé par PyNub Voir le message
    Je pourrais faire en sorte qu'elle me renvoie le nom du fichier mais je n'aurais plus le descripteur et je ne pourrais plus utiliser l'appel read.
    Ben si tu récupères le nom en question de la fonction (étonnant quand-même que tu ne l'aies pas) te suffit de le passer à open() et tu récupèreras un descripteur pour ton read()...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu peux aussi modifier ecrire_temp() pour qu'elle te renvoies à la fois le nom du fichier et son fd.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut
    Citation Envoyé par matafan Voir le message
    Tu peux aussi modifier ecrire_temp() pour qu'elle te renvoies à la fois le nom du fichier et son fd.
    Oui avec un tableau de chaîne ou une structure en effet...

    Comme je me demandais justement si j'étais obligé de faire renvoyer le nom par la fontion et si il n'existait pas "quelquechose" pour faire apparaître le nom j'ai vu stat() mais je ne sais pas comment marche cet appel système.

    Comme je n'avais pas envie de refaire la fonction j'ai créer un char * global et j'écris à l'intérieur avec un strdump(). (je ne sais plus si c'est le bon orthographe). Je sais que ce n'est pas bien... Je vais revoir ça...

    @svaer
    Parce que, théoriquement, le descripteur est créé depuis un nom et que tu es sensé déjà avoir ce nom.
    Justement non la fonction ecrire_temp crée un fichier temporaire avec un nom unique aléatoire et renvoie un descripteur de fichier...

    Merci à vous deux.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par PyNub Voir le message
    Oui avec un tableau de chaîne ou une structure en effet...

    Comme je me demandais justement si j'étais obligé de faire renvoyer le nom par la fontion et si il n'existait pas "quelquechose" pour faire apparaître le nom j'ai vu stat() mais je ne sais pas comment marche cet appel système.
    stat prend en paramètre un nom de fichier et te remplit une structure avec toutes les infos du fichier (taille, type et droits, uid, gid, etc). Tout sauf le nom. En fait, le nom d'un fichier ne lui est jamais directement lié. Le nom d'un fichier n'est qu'une entrée dans un répertoire, entrée associée à l'inode du fichier. Ainsi un nom peut très bien changer sans que le fichier ne change. C'est aussi pour ça que l'effacement d'un fichier ne dépend que des droits du répertoire et non du fichier lui-même (tu peux très bien effacer un fichier ayant des droits en 000). Bref dans Unix, les noms sont totalement décorellés des fichiers.

    Citation Envoyé par PyNub Voir le message
    Justement non la fonction ecrire_temp crée un fichier temporaire avec un nom unique aléatoire et renvoie un descripteur de fichier...
    Il y a d'autres fonctions plus subtiles comme tempnam(). Cette fonction te renvoie un nom unique. Ensuite, tu peux faire open(nom) pour avoir un descripteur => tu as donc à la fois le nom et le descripteur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 280
    Par défaut
    L'auteur du livre que je suis en train de lire dit aussi qu'il existe d'autres solutions pour créer un fichier temporaire, cependant il ajoute que celles-ci sont moins fiable...

    Existe-t-il une traduction du manuel de unistd.h ? Je voudrais avoir une doc si possible en français (ou en anglais...) autre que celle diponible dans le shell j'ai trouvé quelques sites qui fournissent une copie de man unistd.h mais peut-être existe-t-il une doc plus "friendly" ?

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

Discussions similaires

  1. [Batch] Récupérer le nom du fichier sans l'extension à partir du chemin complet
    Par mathieu_r dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2014, 12h10
  2. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  3. récupérer un nom de fichier à partir de FileChooser
    Par adel.87 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 29/01/2008, 17h55
  4. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28
  5. Réponses: 2
    Dernier message: 29/01/2004, 11h05

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