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

C Discussion :

Lien symbolique avec struct dirent


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Par défaut Lien symbolique avec struct dirent
    Bonjour, j'ai un problème au niveau de la recherche avec la struct dirent lors d'un readdir( ).

    Le problème c'est que s'il détecte un lien symbolique, il rentre aussi dedans. Du coup si le lien vaut . (un point) par exemple, je tourne en boucle.

    Comment je peux faire pour qu'il ne rentre pas dans les liens mais affiche juste son nom, merci.

  2. #2
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Je ne suis pas sûr d'avoir bien saisi, me comme ceci, tu peux ignorer le traitement si d->d_name commence par le caractère "."

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DIR *a;
    a=opendir(repertoire);
    struct dirent *d;
    while((d=readdir(a))!=NULL)
     {       
          if(strncmp(d->d_name,".",1)==0)                             
             continue;
     
              /*sinon traitement
               * 
               */
     
      }

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par je®ome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          if(strncmp(d->d_name,".",1)==0)
    Une façon compliquée d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          if (d->d_name[0] == '.')

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Une façon compliquée d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          if (d->d_name[0] == '.')
    Sinon y'a aussi ca qui pourrais fonctionner je pense mais depuis une structure stat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (S_LINK (st->st_mode))
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par DefmY
    Comment je peux faire pour qu'il ne rentre pas dans les liens mais affiche juste son nom, merci.
    Ce serait plutot a poser sur un forum Unix. Regarde lstat.

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Ce serait plutot a poser sur un forum Unix.
    Non c'est pas Unix/Linux, c'est POSIX !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    La solution proposé me semble incorrecte.
    If d->d_name[0] == '.' va matcher aussi tous les fichiers commencant par . mais pas uniquement . ( en particulier tous les fichiers cachés ce qui peut être voulu après tout ).

    Un test correct est d->d_name[0] == '.' && d->d_name[1] == '\0'

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Mais ça ne masquera pas le répertoire parent ".."
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 31
    Par défaut
    Toujours avec ce problème :

    Voila comment je fais :

    Création d'un lien dans le home pour tester

    ln -s . coucou donc coucou -> .

    Quand je lance mon programme, voila le résultat :

    /home/nom/documents/widgets/SysMonitor
    /home/nom/documents/widgets/SysMonitor/image
    /home/nom/coucou
    /home/nom/coucou/bin
    /home/nom/coucou/cours
    /home/nom/coucou/cours/projet
    /home/nom/coucou/cours/JAVA
    /home/nom/coucou/logiciels

    ...

    Tout va bien au début mais quand il voit le coucou, il l'affiche et il rentre dedans. Par contre si il y a pas de coucou, tout marche.

    Par la suite, on a évidemment

    /home/nom/coucou/coucou/documents/widgets/SysMonitor
    /home/nom/coucou/coucou/documents/widgets/SysMonitor/image
    /home/nom/coucou/coucou/coucou
    /home/nom/coucou/coucou/coucou/coucou/bin
    /home/nom/coucou/coucou/coucou/coucou/cours
    /home/nom/coucou/coucou/coucou/coucou/cours/projet
    /home/nom/coucou/coucou/coucou/coucou/cours/JAVA
    /home/nom/coucou/coucou/coucou/coucou/logiciels

    ...

    J'ai pas pu tout copié exactement

    Pourtant je lui ai demandé d'ignorer les '.'

    PS : Pour l'instant je ne veux pas afficher les fichiers cachés. On va deja résoudre ce petit problème

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Franck.H
    Non c'est pas Unix/Linux, c'est POSIX !
    Depuis 2001, il n'y a plus qu'une nuance entre "Single Unix Specification" et Posix.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Depuis 2001, il n'y a plus qu'une nuance entre "Single Unix Specification" et Posix.
    POSIX, c'est un acronyme (BASIC, MS-DOS) et non le nom d'une personne (Pascal, Ada)

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

Discussions similaires

  1. Lien symbolique avec apache
    Par Bin_bash dans le forum Apache
    Réponses: 4
    Dernier message: 08/02/2012, 21h29
  2. [rsync - débutant] Erreur avec les liens symbolique
    Par pierrot10 dans le forum Administration système
    Réponses: 1
    Dernier message: 15/02/2009, 18h13
  3. Réponses: 2
    Dernier message: 31/10/2008, 15h03
  4. Problème de lien symbolique pour le plugin java avec firefox
    Par HNT dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 18/03/2006, 19h50
  5. [Kylix] pb avec lien symbolique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h16

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