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 :

Réecrire la commande pwd


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut Réecrire la commande pwd
    Bonjour à tous,

    Je suis spécialisé en réseau et pour mes études, je dois écrire un algorithme qui fait la meme chose que pwd (arborescence courant). Je dois utiliser des appels systèmes. La commande getpwd() ne doit pas etre utilisée.

    Merci de me dire par où commencer et quelles seront les grandes lignes de l'algo.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 107
    Par défaut
    Et pourquoi pas betement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("directory = \"%s\"", getenv("PWD") );

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    La commande getpwd() ne doit pas etre utilisée.
    Tu ne voulais pas dire getcwd ? pwd veut dire print working directory. getcwd : get current wd. Je ne vois pas trop comment obtenir le répertoire courant sans appel système.

    EDIT : Quand je repense à la question, ne serait-ce pas la commande ls (List Directory) que tu veux recoder ? Dans ce cas c'est déjà dans la FAQ. Parce que un algo pour pwd, ça n'a aucun sens.

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Par défaut
    Bonsoir,
    merci pour vos réponses.
    En faite, l'appel systeme Getcwd n'est pas à utiliser car ça serait trop facile. Je me suis renseigné un peu.
    En gros, il faut jouer avec les numeros d'inodes et parcourir la hierarchie des dossiers avec des chdir(), puis voir l'inode grace au lstat() et s'arreter lorsque l'inode est egale à 2 (correspondant à /). Puis, il suffit de concatener les dossiers stockées en variables.

    Et puis pourquoi un algo pour pwd n'a aucun sens? Toutes les commandes peuvent etre ré implementer.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    Citation Envoyé par Diez_Include Voir le message
    En gros, il faut jouer avec les numeros d'inodes et parcourir la hierarchie des dossiers avec des chdir(), puis voir l'inode grace au lstat() et s'arreter lorsque l'inode est egale à 2 (correspondant à /). Puis, il suffit de concatener les dossiers stockées en variables.
    Et bien pour l'algo ça à l'air d'être bon ! Non ?

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Attention à ta condition d'arrêt quand tu remontes dans l'arborescence : les numéros d'inodes sont uniques ... dans un même système de fichiers ! Si la racine "/" a pour inode 2 (est-ce d'ailleurs gravé dans le marbre ?), d'autres répertoires/fichiers peuvent avoir ce même numéro inode dans un autre système de fichiers.

    Sur mon système (avec une partition home montée sur /home) j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    plx@sony:~$ ls -id /
    2 /
    plx@sony:~$ ls -id /home
    2 /home
    plx@sony:~
    Pour être sur de s'arrêter, dans la remontée, à la racine, je testerais plutôt l'égalité entre le couple (inode,numéro de device) du répertoire courant ET du répertoire parent : '.' et '..' sont identiques SEULEMENT à la racine /.

    démo en python (transposable en C):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    plx@sony:~$ python
    Python 2.6.4 (r264:75706, Dec  7 2009, 18:45:15) 
    [GCC 4.4.1] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> print os.stat('/').st_ino, os.stat('/').st_dev
    2 2053
    >>> print os.stat('/..').st_ino, os.stat('/..').st_dev
    2 2053
    >>> print os.stat('/home').st_ino, os.stat('/home').st_dev
    2 2055
    >>> print os.stat('/home/..').st_ino, os.stat('/home/..').st_dev
    2 2053
    >>>
    De plus, un système de fichiers (autre que que le système racine /) peut ne pas être monté directement sous la racine. Dans ta remontée, tu peux donc passer par un numéro d'inode à 2, avoir n numéros d'inode tout à fait quelconques pour, enfin, arriver à la racine /.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/02/2013, 17h21
  2. masquer le pwd dans la commande exp
    Par Kholle dans le forum Import/Export
    Réponses: 5
    Dernier message: 13/11/2009, 14h24
  3. réecrire la commande cat
    Par waldner77 dans le forum Débuter
    Réponses: 7
    Dernier message: 07/09/2009, 21h41
  4. Réecrire la commande dir
    Par judge06 dans le forum C
    Réponses: 8
    Dernier message: 05/05/2007, 02h22
  5. Commande home pwd
    Par ajsd0208 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/01/2006, 18h37

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