Pb code c ls -l

Bonjour,

Je fais ls -l en C , ça marche mais sa maffiche egalement "." et ".." est ce que qqun sait comment on fait pour les virer?

Merci bcp
Configuration: Windows Vista Internet Explorer 7.0

7 réponses

  1. Contributeur
    Le problème vient de ta fonction stat.
    Tu fais stat(".",&taille). Donc le programme appliquera la fonction stat pour le même répertoire "." (répertoire courant).
    Pour qu'à chaque itération, t'obtiennes la taille avec la fonction stat, tu dois plutôt faire quelque chose du genre :
    struct stat taille;
    while ((lecture = readdir(rep)))
    {
    
    if(lecture->d_name[0] != '.') {
       stat(lecture->d_name,&taille);
       filesize = taille.st_size;
       printf("%s %d \n",lecture->d_name,filesize);
    }
    

    Cdlt,
    1
    1. Contributeur
      Salut,

      Comment ça tu fais "ls -l" en C ? Tu as codé une fonction qui te liste les fichiers d'un répertoire ou tu utilises system("ls -l") ?
      Et sur quel OS tu travailles ?

      Cdlt,
      0
      1. je suis sur linux

        #include <stdio.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>
        #include <unistd.h>
        #include <dirent.h>

        int main()
        {
        // Utilisation de la structure dirent pour recuperer le nom du fichier
        //
        struct dirent *lecture;
        DIR *rep;

        // Se positionner dans le repertoire courant
        //
        rep = opendir(".");

        // Tant qu'il y a des fichiers, afficher leur nom
        //
        while ((lecture = readdir(rep)))
        {
        printf("%s\n", lecture->d_name);
        }

        // Fermeture du repertoire
        //
        closedir(rep);

        return 0;
        }

        voila le code
        0
        1. sa c'est juste ls parce que je veux regler un pb a la fois ^^
          0
      2. C'est bizarre que ta commande "ls -l" t'affiches aussi "." et ".." car sous linux cette commande n'affiche pas les fichers cachés (qui sont tous les fichiers commençant par un ".")

        Sous quel OS as-tu testé ton programme ?
        Car sous Windows je ne sais pas si cette commande agit autrement ou si windows ne considère pas les "." et ".." comme cachés.
        0
        1. Contributeur
          C'est bizarre que ta commande "ls -l" t'affiches aussi "." et ".." car sous linux cette commande n'affiche pas les fichers cachés (qui sont tous les fichiers commençant par un ".")
          Attention à ne pas confondre "." et ".." avec les fichiers cachés. Rien à voir.
          0
        2. @fiddyje compile avec gcc...sa m'affiche bien le resultat attendu mais sa m'affiche le "." et ".." et je veux les enlever parce que apré quand j'essaye de recupere la taille du fichier et de l'afficher sa me met:

          . 4096
          ..4096
          etc

          en faite la taille est bonne mais elle saffiche pas au bon endroit, c'est pour cela que je souhaiterais que qqun m'aide (si possible) a d'abord virer ces 2 trucs qui m'emerdent un peu!!! aprés pour la taille on verra
          0
        3. Contributeur
          @me 06T'as pas répondu à ma question.
          Tu as recodé en C la fonction qui liste un répertoire ? ou tu utilises la fonction system("ls -l") ?
          Et sous quel système travailles-tu ?

          Cdlt,
          0
        4. @fiddyjté mi le code .....

          et je compile avec putty car je ss sous vista...
          0
      3. Les fichiers "." et ".." sont considérés comme cachés, particulier je suis d'accord, sous linux car si tu fais "ls -l" ils ne sont pas affichés. Par contre si tu fais "ls -al" ils ont affichés.
        0
        1. Contributeur
          Les fichiers "." et ".." sont considérés comme cachés
          Non et non. "." signifie le dossier courant et ".." le dossier père. Rien à voir avec la notion de cacher.
          Et puis la fonction première de "ls -al" n'est pas que d'afficher les fichiers cachés mais d'afficher ceux qui commencent par "." Ce qui revient au même au final. Mais en tout cas "." et ".." n'ont rien à voir avec des fichiers cachés.
          0
      4. Et si tu fais ça ?

        if(lecture->d_name[0] != '.')
        {
        filesize = taille.st_size;
        printf("%s %d \n",lecture->d_name,filesize);
        }

        est-ce que ça marche ?
        0
        1. non!! je galere la^^
          0
      5. Contributeur
        Salut,
        Le problème vient de ton stat.
        Tu effectues stat(".", &taille).
        Normal qu'il te donne la taille du dossier puisque "." désigne le dossier courant. Du coup tu as l'impression que ça marche pour la première itération alors que non.
        Il faut que tu mettes le path du fichier en premier argument dans stat (donc à la place du point).
        La taille te sera donnée alors dans taille.st_size de type off_t.

        Cdlt,
        0
        1. ouais mais dans ce cas sa veut dire que si mon fichier source je le met dans un autre endroit il va mdire path incorrect nn?
          par exemple la jtravaille ds le repertoire X on va dire donc toi sque tu me dis si g bein compri sa serait de mettre

          stat("X",....) en admettant que X se situe a la racine de l'arbo;

          mais est ce que si je prend mon fichier .c et que je le met dans un dossier Y il va faloir que je change le path je pense nn?
          se que je voudrais c'est que sa soit "generique" en qq sorte enfin si c possible
          0