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 :

lister les répertoires et sous répertoire


Sujet :

Linux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut lister les répertoires et sous répertoire
    Hello

    Je cherche a le faire en language #C
    J'ai pas mal chercher. J'ai quand même fini par trouver le code suivant
    sa marcherai presque sauf que stat a besoin du chemin complet. or readdir
    ne renvoie pas le chemin complet je ne vois pas trop comment contourner le problème.

    Je voudrai faire un programme qui permet de sauvegarder et de compresser comme tar, mai également d'avoir tout les info sur les droit l'utilisateur et les droit du fichier, de reproduire une arborescence dans un répertoire de sauvegarde. de sauvegarder le master boot record. le tout avec des option voire carrément un fichier de config. bref du boulot en perspective et comme je débute en #C c'est loin d'etre evident.
    Je suis sous debian testing et j'utilise GCC 4.1 pour compiler

    voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <sys/stat.h>
    #include <assert.h>
    #include <errno.h>
    void parse(char* sourcerep) {
    	struct dirent* dossiers = NULL;
    	DIR* dossier = NULL;
    	struct stat infos;
    	dossier = opendir(sourcerep);
    	while ((dossiers = readdir(dossier)) != NULL) {
    		printf("ALL--> %s\n", dossiers->d_name);
    /*
    		stat(dossiers->d_name, &infos);
    		if (S_ISDIR(infos.st_mode)) {
    //			char* commande = NULL;
    			if (strcmp(dossiers->d_name, ".") == 0 || strcmp(dossiers->d_name, "..") == 0) continue;
     
    //			printf("Repertoire: %s\n", dossiers->d_name);
    //			chdir(dossiers->d_name);
    			parse(dossiers->d_name);
    			//chdir("..");
    			//fprintf (stderr, "Erreur: %s.\n", strerror(errno) );
    		} else {
     
    			//printf("Fichier: %s\n", dossiers->d_name);
    			sleep(1);
    		}
    */
    	}
    	closedir(dossier);
    }
     
     
    int main(void) {
    	parse("/");
    	return EXIT_SUCCESS;
    }
    Voila sion je comptai m'inspirer du code de find et de ls ,mai je ne sai pas ou denicher les souces ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Points : 8 237
    Points
    8 237
    Par défaut
    Citation Envoyé par panthere noire
    Voila sion je comptai m'inspirer du code de find et de ls ,mai je ne sai pas ou denicher les souces ?
    pour ls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get source coreutils
    pour find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get source findutils

  3. #3
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    pour l'ajout du tar pour compresser les fichiers listés,
    suffira de rajouter :
    1-la verification de la presence de tar sur le systeme
    2-executer la requette tar cf ...... .......

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Michaël
    pour ls :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get source coreutils
    pour find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    apt-get source findutils

    Merci sa va me donner un point de depart )

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Je cherche a le faire en language #C
    J'ai pas mal chercher. J'ai quand même fini par trouver le code suivant
    Trouvé ou écrit ?

    sa marcherai presque sauf que stat a besoin du chemin complet. or readdir
    ne renvoie pas le chemin complet je ne vois pas trop comment contourner le problème.
    Le chemin complet est soit un chemin relatif soit un chemin absolu. Là où tu en est, c'est un chemin relatif dont tu as besoin. Dans ta fonction parse, tu as en paramètre le chemin pour aller dans ton dossier et quand tu fais readdir, tu accèdes à tous les fichiers du dossier ouvert.

    Il te suffit donc de concaténer le chemin et le noms du fichier dans une chaîne et ensuite tester le résultat avec stat (ou lstat)

    Je voudrai faire un programme qui permet de sauvegarder et de compresser comme tar
    tar ne compresse pas, c'est un archiveur : il met tout les fichiers dans un dossier. Si tu veux compresser plusieurs fichiers c'est un mix entre tar et (g|b)zip. Si tu as accès aux commandes, tu peux ne faire qu'un appel à celles ci comme on te l'a suggéré. Si tu veux le faire à la main, c'est un poil plus long : pour tar, je pense que tu as des idées, pour la compression, c'est un huffman qu'il te faut.

    mai également d'avoir tout les info sur les droit l'utilisateur et les droit du fichier
    stat ou lstat sont là pour ça !

    de reproduire une arborescence dans un répertoire de sauvegarde.
    J'ai peur de ne pas comprendre exactement ce que tu veux faire.

    de sauvegarder le master boot record.
    sérieux ?

    le tout avec des option voire carrément un fichier de config.
    Pas de problème pour ça, un simple fichier texte suffit avec une option par ligne.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par PRomu@ld
    Trouvé ou écrit ?



    Le chemin complet est soit un chemin relatif soit un chemin absolu. Là où tu en est, c'est un chemin relatif dont tu as besoin. Dans ta fonction parse, tu as en paramètre le chemin pour aller dans ton dossier et quand tu fais readdir, tu accèdes à tous les fichiers du dossier ouvert.

    Il te suffit donc de concaténer le chemin et le noms du fichier dans une chaîne et ensuite tester le résultat avec stat (ou lstat)
    Oui mai comment je fais pour determiner la racine je doit dire que je m'y per un peut ?


    tar ne compresse pas, c'est un archiveur : il met tout les fichiers dans un dossier. Si tu veux compresser plusieurs fichiers c'est un mix entre tar et (g|b)zip. Si tu as accès aux commandes, tu peux ne faire qu'un appel à celles ci comme on te l'a suggéré. Si tu veux le faire à la main, c'est un poil plus long : pour tar, je pense que tu as des idées, pour la compression, c'est un huffman qu'il te faut.
    je verrai pour la compression, car c'est la le but , je pense utiliser uniquement bzip.
    stat ou lstat sont là pour ça !

    J'ai peur de ne pas comprendre exactement ce que tu veux faire.
    Un moyen plus simple de sauvgarder le systeme dans son ensemble , mai avec des options. dd, mondo ,partimage, on tous des defaut.Après les avoir testé, a chaque fois pas moyen de recuperer le systeme.
    bref je prefere sauvgarder les fichier plutot que de faire un grosse image, chose qui pourrai etre fait par la suite.

    Pour ce qui est du MBR oui dans la mesur du possible , car le but c'est de pouvoire recuperer le systeme facilment, depuis un live cd
    Mai bon sa je pense que cela sera fait en dernier si j'y parvient

  7. #7
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Oui mai comment je fais pour determiner la racine je doit dire que je m'y per un peut ?
    La racine t'es déjà donnée par le paramètre de parse, c'est un chemin relatif ou absolu. (pour lstat peut importe que le chemin soit relativ ou absolu donc pas de soucis)

    Un moyen plus simple de sauvgarder le systeme dans son ensemble , mai avec des options. dd, mondo ,partimage, on tous des defaut.Après les avoir testé, a chaque fois pas moyen de recuperer le systeme.
    bref je prefere sauvgarder les fichier plutot que de faire un grosse image, chose qui pourrai etre fait par la suite.
    Pour la sauvegarde, pourquoi ne pas faire un script qui appellerait rsync et bzip régulièrement ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par PRomu@ld
    Pour la sauvegarde, pourquoi ne pas faire un script qui appellerait rsync et bzip régulièrement ?
    Parce qu ej'ai deja essayer et sa plente. de plus c'est vraiment très très lent. donc je suis passer en C

Discussions similaires

  1. Lister les sous-répertoires d'un répertoire
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/01/2009, 20h08
  2. Réponses: 0
    Dernier message: 16/04/2008, 21h59
  3. Réponses: 1
    Dernier message: 30/10/2007, 09h21
  4. Réponses: 7
    Dernier message: 06/09/2007, 13h18

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