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 :

probleme de programmation de la commande locate


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut probleme de programmation de la commande locate
    bonjour,

    je dois dans le cadre de mon cours programmer la commande locate qui permet de rechercher un fichier dans l'arborescence du disque dur.
    Celle ci fonctionne en deux partie :
    - la commande updatedb qui parcours l'intégralité du disque et enregistre dans un fichier l'ensemble de l'arborescence.
    - locate parcourt le fichier afin de trouver les occurrences.

    pour ceci je n'ai ni le droit d'utiliser locate ni find

    j'ai pensé utiliser des tubes et les fonction execl
    jusqu'ici j'arrive a écrire sur la sortie standard le contenu du disque mais je n'arrive pas a le rediriger dans le fichier
    if(pipe (p)<0)
    exit(-1);
    if((pid1 = fork())<0)
    exit(-2);
    if(pid1 == 0) // fils1
    {
    close(p[0]); //fermeture du tube de lecture

    dup2(p[1],1); // duplication du tube d'ecriture dans la sortie standard
    close(p[1]); // fermeture du tube d'ecriture
    printf("ls -al\n");
    execl("/bin/ls", "ls", "-aRl", "/", NULL); //execution de la commande ls -al /
    }
    else
    {
    if((pid2 = fork())<0)
    exit(-3);
    if(pid2 == 0) //fils2
    {
    dup2(p[0], 1 ); //duplication du tube de lecture dans la sortie standard
    close(p[0]); //fermeture du tube de lecture
    close(p[1]); //fermeture du tube d'ecriture
    printf("grep\n");
    execl("/bin/grep", "grep", "rwxrwxrwx", NULL); //execution de grep pour extraire les lignes contenant tous les droits
    exit(-1);
    }
    else
    {
    if((pid3 = fork())<0)
    exit(-3);
    if(pid3 == 0) //fils3
    {
    while(read(1, &c, 1)>0)
    {
    write(fd1, &c, 1);
    }
    close(p[0]);
    close(p[1]);
    printf("ecriture dans locate.database\n");
    }
    else
    {
    close(p[0]);
    close(p[1]);
    close(fd1);
    wait(&ret);
    wait(&ret);
    wait(&ret);
    exit(0);

    en plus depuis mes derniers rajouts le programme bug donc si vous avez une idée je suis toute ouïe

    merci d'avance
    Fichiers attachés Fichiers attachés
    • Type de fichier : c test.c (2,0 Ko, 85 affichages)

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    (Tu serais pas dans la meme classe que
    http://www.developpez.net/forums/sho...d.php?t=154941
    ? )

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    possible mais le programme que j'ai là ne doit pas copier totalement l'arborescence mais copier simplement toutes les adresses de fichiers et de repertoire dans un fichier afin de pouvoir les retrouver par après
    c comme rechercher sous windows mais en deux parties mdr

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    en fait mon problème ici c de pouvoir stocker toute l'arborescence
    etant donné que les commandes shell ne peuvent pas être totalement applicable a execl

    j'avais essayé execl("/bin/ls", "ls", "-aRl", "/", ">locate.database", NULL);

    mais ça ne fonctionne pas et je n'arrive pas avec les read et write ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    quelqu'un pourrait m'aider ? snif ... =)

  6. #6
    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
    la structure stat te fourni les droits et le type de fichier

    un répertoire s' ouvre avec opendir()
    et se lit avec readdir()

    explications de stat,opendir,readdir dans la man

    pas besoin d'utiliser de tubes, ni la fonction excecl pour realiser ce programme

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    mais comment avec stat je pourrais extraire les droit ?
    avec st_mode j'ai le type et la protection du fichier mais je peux uniquement le tester pour savoir si c'est un fichier ordinaire ou un fichier périphérique etc ....

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    struct stat stbuf;
    if(stat(tonfichier,&stbuf)==-1)
    {
            perror("stat");
            exit(1);
    }
    puis faut tester les cas possibles,
    droits en lecture pour tout le monde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          if((stbuf.st_mode & S_IRUSR)&&(stbuf.st_mode & S_IRGRP)&&(stbuf.st_mode & S_IROTH)){
        /* traitement */
    }
    pour ecriture, ce n'est pas R (read) , mais W (write)
    et X (execute) pour les droits d' exécution

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    merci bcp =)
    j'ai reussi a bidouiller un truc ça devrait convenir a mon prof

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2005, 09h50
  2. [System][EXEC] Probleme d'execution avec une commande parametrée.
    Par chicorico dans le forum Général Java
    Réponses: 15
    Dernier message: 20/05/2005, 15h07
  3. [TP]Problème de programme exécutable en mode graphique
    Par GoodVibe dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 24/09/2004, 09h47
  4. [Kylix] probleme execution programme
    Par vin's dans le forum EDI
    Réponses: 1
    Dernier message: 31/03/2004, 12h25
  5. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36

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