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

Bibliothèque standard C Discussion :

Supprimer un lien symbolique (vers dossier)


Sujet :

Bibliothèque standard C

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 331
    Points : 4 314
    Points
    4 314
    Par défaut Supprimer un lien symbolique (vers dossier)
    Bonsoir

    Je cherche à supprimer un lien symbolique pointant vers un autre dossier.
    mon_lien -> chemin/vers/dossier

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    remove("mon_lien"); //ne fonctionne pas
    unlink("mon_lien"); //ne fonctionne pas non plus
    De plus lorsque je n'ai pas le résultat attendu lorsque je test celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stat(path, &statf);
    cout << S_ISLNK(statf.st_mode) << endl;
    cout << S_ISREG(statf.st_mode) << endl;
    cout << S_ISDIR(statf.st_mode) << endl;
    J'obtiens le résultat suivant :
    0
    0
    1

    Je voudrais donc savoir comment tester que le fichier est un lien symbolique (genre S_ISSYMLINK() ) et comment supprimer celui-ci.

    Merci d'avance de votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    Salut, je ne vais malheureusement pas t'apporter de réponse parce que je ne sais tout simplement pas, mais je veux juste te signaler qu'à la vue de

    je pense que tu fais du C++, or ici c'est le forum C, donc tu auras peut être plus de réponse dans le forum adéquat.

    Bon courage

  3. #3
    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
    Points : 12 462
    Points
    12 462
    Par défaut
    Rien à voir avec la bibliothèque standard du C, c'est du POSIX et des appels système du monde Unixoides !

    Toutefois, si ton fichier existe en plusieurs exemplaire et voir même sous des noms différents, ton fichier sera peut-être supprimé du répertoire dans lequel tu le supprime mais il risque fort d'exister encore si dans l'i-noeud le nombre n'est pas à zéro, s'il descend à zéro il devrait normalement être supprimé du disque.

    Je voudrais donc savoir comment tester que le fichier est un lien symbolique (genre S_ISSYMLINK() )
    Normalement S_ISLNK devrait faire l'affaire, c'est une macro prévue à cet effet ! Je ne sais cependant pas si c'est exactement le même cas que pour un lien vers un fichier, normalement sous Linux tout est fichier mais va savoir avec leur règles

    A tout hasard, as-tu essayé avec la fonction rmdir, je sais normalement c'est pour supprimer un répertoire mais est-ce qu'il supprime aussi un lien vers un répertoire... ca je ne le sais pas, fait une copie de ton répertoire avant quand même

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system ( "rm -f nom_du_lien");

  5. #5
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par man 2 stat
    stat() stats the file pointed to by path and fills in buf.

    lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to.
    Il faut donc utiliser lstat pour savoir que c'est un lien symbolique !
    Sinon qu'entends-tu par "ça ne marche pas" ?? Chez moi le lien est bien détruit avec unlink. Tu regardes les valeurs de retour/errno ?

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 397
    Points : 23 761
    Points
    23 761
    Par défaut
    Citation Envoyé par smarties Voir le message
    BJe voudrais donc savoir comment tester que le fichier est un lien symbolique (genre S_ISSYMLINK() ) et comment supprimer celui-ci.
    Même réponse qu'au dessus. J'ajouterai seulement que S_ISLNK() fait forcément référence à un lien symbolique car les liens durs ne sont pas des entités du système de fichier en eux-mêmes.

    Si tu ne peux pas virer un lien symbolique avec unlink(), il faut vérifier les codes de retour. Le plus probable est que des droits d'accès particuliers aient été posés sur le répertoire qui contient le lien symbolique.

    Bon courage.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/04/2012, 19h00
  2. Réponses: 5
    Dernier message: 17/08/2010, 12h37
  3. Supprimer un lien symbolique
    Par miketidy dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 03/11/2008, 12h52
  4. [Linux] Lien symbolique vers MySQL
    Par tamiii dans le forum Outils
    Réponses: 1
    Dernier message: 14/03/2008, 17h12
  5. [1.x] Le lien symbolique vers sf/ et le Virtualhost!
    Par Plexi86 dans le forum Symfony
    Réponses: 1
    Dernier message: 29/10/2007, 12h12

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