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 :

Information sur des fichiers


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut Information sur des fichiers
    Bonsoir,
    quand je lance l'executable pour un seul fichier ou un seul repertoire il m'affiche rien
    > ./toto ls.c
    >

    par contre pour plusieur il m'affiche :
    > ./toto *
    48 2005-06-18 19:54:30 2005-09-22 20:49:39 2005-06-18 19:54:30

    voila 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
     
    #define FMT_TIME "%Y-%m-%d %T" 
     
    int compar_size (const void *pt_a, const void *pt_b)
    {
       const struct stat *pt_sa = pt_a;
       const struct stat *pt_sb = pt_b;
       return pt_sa->st_size - pt_sb->st_size;
      // return pt_sa->st_mtime - pt_sb->st_mtime;
    }
     
    int main (int argc, char *argv[])
    {
      int mode;
      char * patch=NULL;
      char date1[30];
      char date2[30];
      char date3[30];
      int i;
      int Max = argc -1; 
     
      struct stat *sbuf =malloc (Max * sizeof *sbuf);
      if (sbuf != NULL)
      {
        int result = 0;
        for (i=0; !result && i < Max; i++)
        {
          result=stat(argv[i],&sbuf[i]);
        }
        if (!result)
        {
          qsort(sbuf, Max, sizeof *sbuf, compar_size);
          for(i=1; i <Max; i++)
          {
            mode = sbuf[i].st_mode;
     
            patch=argv[i];
            strftime (date1,Max,FMT_TIME,gmtime(&sbuf[i].st_mtime));
            strftime (date2,Max,FMT_TIME,gmtime(&sbuf[i].st_atime));
            strftime (date3,Max,FMT_TIME,gmtime(&sbuf[i].st_ctime));
            if (S_ISDIR (mode)) 
            {
              printf("%10lu %s %15s\n", (unsigned long)sbuf[i].st_size, date3, patch);
            }
            if (S_ISREG (mode))
            {
              printf("%10lu %s %15s\n", (unsigned long)sbuf[i].st_size, date3, patch);
            }
          }  
        }
        else 
        {
          printf("Problem getting information\n");
          perror(argv[i + 1]);
        }
        free (sbuf), sbuf=NULL;
      }
        return 0;
    }
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Avec un seul fichier argc = 2 ok?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Max = argc -1; // Max = 1
    Donc dans le 1er for tu ne va que jusqu'a argv[0]

    Dans le 2eme for tu pars de i=1 tu va jusqu'à i < Max or Max = 1 donc tu ne rentre jamais dans ton for
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: PB
    Citation Envoyé par melmouj
    quand je lance l'executable pour un seul fichier ou un seul repertoire il m'affiche rien
    > ./toto ls.c
    >
    voila le code
    [Je vois que mon travail porte ses fruits, ça fait plaisir...]

    Commentaires, mise au point. Pose des questions si tu ne comprends pas.
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
     
    #define FMT_TIME "%Y-%m-%d %T"
     
    /* -ed- fonction privee (ajoute 'static') */
    static int compar_size (const void *pt_a, const void *pt_b)
    {
       const struct stat *pt_sa = pt_a;
       const struct stat *pt_sb = pt_b;
       return pt_sa->st_size - pt_sb->st_size;
    }
     
    int main (int argc, char *argv[])
    {
       int mode;
       char *patch = NULL;
     
    /* -ed- non utilisees...
       char date1[30];
       char date2[30];
     */
       char date3[30];
    /* -ed-
       int i;
       int Max = argc - 1;
     
       size_t est un meilleur type pour le indices et les nombres d'objets...
     */
       size_t i;
       size_t Max = argc - 1;
     
    #if 0
       printf ("argc=%d argv[1]='%s'\n", argc, argv[1]);
    #endif
     
       /* -ed- le tableau des statistiques. Ok. */
       struct stat *sbuf = malloc (Max * sizeof *sbuf);
     
       if (sbuf != NULL)
       {
          /* -ed-
             int result = 0;
     
             je prefere un identificateur plus 'concret'.
           */
          int err = 0;
     
          for (i = 0; !err && i < Max; i++)
          {
             /* -ed-
                result = stat (argv[i], &sbuf[i]);
                avec i qui commence a 0, c'est surement pas argv[i] !
              */
             err = stat (argv[i + 1], sbuf + i);
          }
     
          if (!err)
          {
             qsort (sbuf, Max, sizeof *sbuf, compar_size);
     
    /* -ed-
       for (i = 1; i < Max; i++)
     
       ben non, pas 1, sinon, tu sautes le 0...
     
     */
             for (i = 0; i < Max; i++)
             {
                mode = sbuf[i].st_mode;
     
    /* -ed-
       patch = argv[i];
     
       ben non, pas i, mais i+1...
     
     */
                patch = argv[i + 1];
                /* -ed-
                   strftime (date1, Max, FMT_TIME, gmtime (&sbuf[i].st_mtime));
                   strftime (date2, Max, FMT_TIME, gmtime (&sbuf[i].st_atime));
                   strftime (date3, Max, FMT_TIME, gmtime (&sbuf[i].st_ctime));
                   Pourquoi Max ? sizeof date1..3 est probablement ce que tu veux...
     
                   date1 et date2 ne sont jamais utilisees...
                 */
     
                strftime (date3, sizeof date3, FMT_TIME, gmtime (&sbuf[i].st_ctime));
     
     
                if (S_ISDIR (mode))
                {
                   printf ("%10lu %s %15s\n", (unsigned long) sbuf[i].st_size, date3, patch);
                }
                if (S_ISREG (mode))
                {
                   printf ("%10lu %s %15s\n", (unsigned long) sbuf[i].st_size, date3, patch);
                }
             }
          }
          else
          {
             printf ("Problem getting information\n");
             perror (argv[i + 1]);
          }
          free (sbuf), sbuf = NULL;
       }
     
       assert (sbuf == NULL);
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut PB
    Merci ,

    pour afficher les droits
    j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf ("-8o\n",  sbuf[i].st_mode)
    et ça me donne des numeric (:100664 par exp )
    et moi je veut qu'il me les affiche sous cette forme -rwxr-xr-x

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: PB
    Citation Envoyé par melmouj
    pour afficher les droits
    j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf ("-8o\n",  sbuf[i].st_mode)
    et ça me donne des numeric (:100664 par exp )
    Normal.
    et moi je veut qu'il me les affiche sous cette forme -rwxr-xr-x
    Rien de standard (évidemment, c'est un format d'affichage unixoide). Il y a peut être des macros ou des fonctions spécialisées dans POSIX.1.

    http://emmanuel-delahaye.developpez.com/notes.htm#posix

    Sinon, à toi d'analyser le champ par groupes de 3 bits, d'en tirer les valeurs (0-7) et d'associer ces valeurs à leur traduction textuelle. (Tu pourrais aussi bricoler avec les caractères de la représentation octale, par exemple "100664"
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut PB
    Bonsoir,

    il ya un petit probleme concernant le qsort qui m'affiche la taille des fichiers:

    c-à-d la taille ne correspond au bon fichier exemple lorsqu'on fait un tri suivant la taille:
    > ls -l *.c
    -rw-r--r-- 1 melmouja users 400 2005-09-25 00:31 chr.c
    -rw-r--r-- 1 melmouja users 886 2005-09-17 15:06 conversion.c
    -rw-r--r-- 1 melmouja users 1446 2005-09-18 14:00 exo.c
    -rw-r--r-- 1 melmouja users 1243 2005-09-13 22:54 ls.c
    ..................
    >./tot *.c
    melmouja 1000 100 users 310 20050919-20:11:05 chr.c
    melmouja 1000 100 users 400 20050924-22:31:44 conversion.c
    melmouja 1000 100 users 491 20050619-16:14:52 exo.c
    melmouja 1000 100 users 703 20050917-11:16:49 ls.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
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #include <assert.h>
    #include <pwd.h>
    #include <grp.h>
     
    #define FMT_TIME "%Y-%m-%d %T"
     
    /* -ed- fonction privee (ajoute 'static') */
    static int compar_size (const void *pt_a, const void *pt_b)
    {
       const struct stat *pt_sa = pt_a;
       const struct stat *pt_sb = pt_b;
       return pt_sa->st_size - pt_sb->st_size;
    }
     
    int main (int argc, char *argv[])
    {
       int mode;
       char *patch = NULL;
     
    /* -ed- non utilisees...
       char date1[30];
       char date2[30];
     */
       char date3[30];
    /* -ed-
       int i;
       int Max = argc - 1;
     
       size_t est un meilleur type pour le indices et les nombres d'objets...
     */
       size_t i;
       size_t Max = argc - 1;
     
    #if 0
       printf ("argc=%d argv[1]='%s'\n", argc, argv[1]);
    #endif
     
       /* -ed- le tableau des statistiques. Ok. */
       struct stat *sbuf = malloc (Max * sizeof *sbuf);
       struct group  * g;
       struct passwd * p;
       if (sbuf != NULL)
       {
          /* -ed-
             int result = 0;
     
             je prefere un identificateur plus 'concret'.
           */
          int err = 0;
     
          for (i = 0; !err && i < Max; i++)
          {
             /* -ed-
                result = stat (argv[i], &sbuf[i]);
                avec i qui commence a 0, c'est surement pas argv[i] !
              */
             err = stat (argv[i + 1], sbuf + i);
          }
     
          if (!err)
          {
             qsort (sbuf, Max, sizeof *sbuf, compar_size);
     
    /* -ed-
       for (i = 1; i < Max; i++)
     
       ben non, pas 1, sinon, tu sautes le 0...
     
     */
             for (i = 0; i < Max; i++)
             {
                mode = sbuf[i].st_mode;
     
    /* -ed-
       patch = argv[i];
     
       ben non, pas i, mais i+1...
     
     */
                patch = argv[i + 1];
                p = getpwuid (sbuf[i].st_uid) ;
                g = getgrgid (sbuf[i].st_gid) ;
                /* -ed-
                   strftime (date1, Max, FMT_TIME, gmtime (&sbuf[i].st_mtime));
                   strftime (date2, Max, FMT_TIME, gmtime (&sbuf[i].st_atime));
                   strftime (date3, Max, FMT_TIME, gmtime (&sbuf[i].st_ctime));
                   Pourquoi Max ? sizeof date1..3 est probablement ce que tu veux...
     
                   date1 et date2 ne sont jamais utilisees...
                 */
     
                strftime (date3, sizeof date3, FMT_TIME, gmtime (&sbuf[i].st_ctime));
     
     
                if (S_ISDIR (mode))
                {
                   if (p)
                  {
                    printf ("%-8s ",p->pw_name); 
                    /*printf ("%d ",p->pw_uid); 
                    printf ("%d ",p->pw_gid);*/
                  } 
                  if (g) printf ("%-8s ",g->gr_name);
                  printf ("%10lu %s %15s\n", (unsigned long) sbuf[i].st_size, date3, patch);
                }
                if (S_ISREG (mode))
                {
                   if (p)
                  {
                    printf ("%-8s ",p->pw_name); 
                   /* printf ("%d ",p->pw_uid); 
                    printf ("%d ",p->pw_gid);*/
                  } 
                  if (g) printf ("%-8s ",g->gr_name);
                   printf ("%10lu %s %15s\n", (unsigned long) sbuf[i].st_size, date3, patch);
                }
             }
          }
          else
          {
             printf ("Problem getting information\n");
             perror (argv[i + 1]);
          }
          free (sbuf), sbuf = NULL;
       }
     
       return 0;
    }
    Merci

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: PB
    Citation Envoyé par melmouj
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <pwd.h>
    #include <grp.h>
    Trop spécifique a Unix. On a atteint les limites de la portabilité sous Windows/Dev-C++. Ca ne compile pas chez moi, je ne peux t'aider plus.

    Le code que j'avais posté précédemment donne par exemple ça :
    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
     
    <...>
         12464 2005-05-04  /clib/ed/src/pipe.c
         12703 2005-05-04  /clib/ed/src/prg.c
         12841 2005-05-04  /clib/ed/src/q.c
         13528 2005-05-04  /clib/ed/src/ra.c
         13693 2005-05-04  /clib/ed/src/ra_dbg.c
         16560 2005-05-04  /clib/ed/src/rb.c
         17383 2005-05-04  /clib/ed/src/rec.c
         17501 2005-05-04  /clib/ed/src/s.c
         18269 2005-05-04  /clib/ed/src/split.c
         18323 2005-08-26  /clib/ed/src/stat.c
         18983 2005-05-04  /clib/ed/src/str.c
         19540 2005-05-04  /clib/ed/src/sys.c
         20705 2005-05-04  /clib/ed/src/sys_ver.c
         22202 2005-05-04  /clib/ed/src/sysalloc.c
         22889 2005-05-04  /clib/ed/src/sz.c
         22932 2005-05-04  /clib/ed/src/tim.c
         23948 2005-04-29  /clib/ed/src/tok.c
         24459 2005-05-04  /clib/ed/src/verclib.c
         25961 2005-05-04  /clib/ed/src/verlib.c
         31265 2005-05-04  /clib/ed/src/vt100.c
         47875 2005-05-04  /clib/ed/src/xdr.c
    ce qui me parait plus que correct.
    Resultat d'un dir (avec tri par taille)
    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
     
    <...>
    MNU      C          17 383  20/08/05  18:29 mnu.c
    SYS      C          17 501  20/08/05  18:34 sys.c
    FIC      C          18 269  24/09/05  23:24 fic.c
    GLL      C          18 323  10/09/05  19:47 gll.c
    DATE     C          18 983  10/09/05  15:08 date.c
    RA       C          19 540  20/08/05  18:32 ra.c
    S        C          20 705  18/03/05  11:13 s.c
    REC      C          22 202  18/03/05  11:13 rec.c
    HOST     C          22 889  18/03/05  11:13 host.c
    Q        C          22 932  20/08/05  18:32 q.c
    SYSALLOC C          23 948  02/05/05   8:24 sysalloc.c
    FSM      C          24 459  18/03/05  11:13 fsm.c
    MUSR     C          25 961  20/08/05  18:29 musr.c
    STR      C          31 265  20/08/05  18:33 str.c
    XDR      C          47 875  10/09/05  19:50 xdr.c
    Bon, ben clair, y'a un bug...

    Ok, j'ai trouvé.

    On trie le tableau de stat, mais on continue à afficher le nom du fichier avec la liste donnée par le shell dans argv. Ca ne correspond plus.

    On devrait trouver le nom dans stat sinon, il faut faire une structure plus grande qui contient stat, mettre le nom (l'adresse suffit) et trier comme avant (il faudra retoucher la fonction de comparaison en conséquence...)

    Corrigé. Ca donne çà :
    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
    <...>
         12841 2005-05-04  /clib/ed/src/fl.c
         13528 2005-05-04  /clib/ed/src/rb.c
         13693 2005-05-04  /clib/ed/src/pipe.c
         16560 2005-05-04  /clib/ed/src/fifo.c
         17383 2005-05-04  /clib/ed/src/mnu.c
         17501 2005-05-04  /clib/ed/src/sys.c
         18269 2005-05-04  /clib/ed/src/fic.c
         18323 2005-08-26  /clib/ed/src/gll.c
         18983 2005-05-04  /clib/ed/src/date.c
         19540 2005-05-04  /clib/ed/src/ra.c
         20705 2005-05-04  /clib/ed/src/s.c
         22202 2005-05-04  /clib/ed/src/rec.c
         22889 2005-05-04  /clib/ed/src/host.c
         22932 2005-05-04  /clib/ed/src/q.c
         23948 2005-04-29  /clib/ed/src/sysalloc.c
         24459 2005-05-04  /clib/ed/src/fsm.c
         25961 2005-05-04  /clib/ed/src/musr.c
         31265 2005-05-04  /clib/ed/src/str.c
         47875 2005-05-04  /clib/ed/src/xdr.c
    C'est OK. Je te laisse faire la correction. (2 ème solution)
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut PB
    D'accord,
    oublions: #include <pwd.h>
    #include <grp.h>

    reprenons le code sans ces deux libs

    la taille ne correspond au bon fichier, mais le qsort ça marche trés bien.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: PB
    Citation Envoyé par melmouj
    D'accord,
    oublions: #include <pwd.h>
    #include <grp.h>

    reprenons le code sans ces deux libs

    la taille ne correspond au bon fichier, mais le qsort ça marche trés bien.
    Ok. J'ajoute le 'dir' officiel... sur le post précédent.
    Huh! Effectivement, c'est le bazar...

    Je vais voir ça...
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut PB
    quand tu compare avec ls -l: ne donne pas la meme chose:

    melmouja 1000 100 users 72 2005-07-28 18:25:46 chr.c
    melmouja 1000 100 users 158 2005-06-19 19:56:07 conversion.c
    melmouja 1000 100 users 204 2005-09-07 17:55:39 exo.c
    melmouja 1000 100 users 214 2005-06-19 21:10:53 hello.java
    melmouja 1000 100 users 267 2005-06-19 21:24:45 ls.c
    melmouja 1000 100 users 310 2005-09-19 20:11:05 mkt.c
    melmouja 1000 100 users 400 2005-09-24 22:31:44 nb_fichier.c
    melmouja 1000 100 users 491 2005-06-19 16:14:52 pr.c
    melmouja 1000 100 users 703 2005-09-17 11:16:49 prog.sh
    melmouja 1000 100 users 886 2005-09-17 13:06:04 rec1.c
    melmouja 1000 100 users 1012 2005-09-17 20:42:02 rec.c
    melmouja 1000 100 users 1243 2005-09-13 20:54:17 resume.txt
    melmouja 1000 100 users 1446 2005-09-18 12:00:11 test1.c
    melmouja 1000 100 users 1567 2005-09-18 20:22:18 test2.c
    melmouja 1000 100 users 2212 2005-09-29 20:11:40 test3.c
    melmouja 1000 100 users 2560 2005-09-29 20:10:34 test3.c~
    melmouja 1000 100 users 2645 2005-09-29 20:10:21 test3.o
    melmouja 1000 100 users 2646 2005-09-29 20:10:21 titi.c
    melmouja 1000 100 users 3237 2005-09-29 20:12:34 titi.c~
    melmouja 1000 100 users 3245 2005-09-29 20:12:34 titi.o
    melmouja 1000 100 users 3321 2005-09-22 20:42:54 toto.sh
    melmouja 1000 100 users 5070 2005-09-28 20:26:09 validAlphaNum.sh

    mais ls -l donne :
    -rwxr-xr-x 1 melmouja users 15898 2005-09-22 22:44 a
    -rw-r--r-- 1 melmouja users 1044782 2005-09-07 21:27 appretissage_java
    drwxr-xr-x 2 melmouja users 48 2005-06-18 21:54 bin
    -rw-r--r-- 1 melmouja users 400 2005-09-25 00:31 chr.c
    -rwxr-xr-x 1 melmouja users 9599 2005-09-19 21:33 conv
    -rw-r--r-- 1 melmouja users 886 2005-09-17 15:06 conversion.c
    drwx------ 5 melmouja users 488 2005-09-19 22:30 Desktop
    drwxr-xr-x 2 melmouja users 80 2005-06-18 21:54 Documents
    drwxr-xr-x 2 melmouja users 120 2005-09-28 21:53 example
    -rw-r--r-- 1 melmouja users 1446 2005-09-18 14:00 exo.c
    -rw-r--r-- 1 melmouja users 204 2005-09-07 19:55 hello.java
    drwxr-xr-x 2 melmouja users 80 2005-09-07 21:37 java
    drwx------ 2 melmouja users 48 2005-07-30 22:49 kza-downloads
    -rw-r--r-- 1 melmouja users 1243 2005-09-13 22:54 ls.c
    -rw-r--r-- 1 melmouja users 310 2005-09-19 22:11 mkt.c
    -rw-r--r-- 1 melmouja users 491 2005-06-19 18:14 nb_fichier.c
    -rw-r--r-- 1 melmouja users 1567 2005-09-18 22:22 pr.c
    -rwxr--r-- 1 melmouja users 267 2005-06-19 23:24 prog.sh
    drwxr-xr-x 2 melmouja users 80 2005-06-18 21:54 public_html
    -rw-r--r-- 1 melmouja users 3321 2005-09-22 22:42 rec1.c
    -rw-r--r-- 1 melmouja users 5070 2005-09-28 22:26 rec.c
    -rw-r--r-- 1 melmouja users 214 2005-06-19 23:10 resume.txt
    -rw-r--r-- 1 melmouja users 640685 2005-09-19 22:26 Syst?mes Informatiques
    -rw-r--r-- 1 melmouja users 703 2005-09-17 13:16 test1.c
    -rw-r--r-- 1 melmouja users 1012 2005-09-17 22:42 test2.c
    -rw-r--r-- 1 melmouja users 2645 2005-09-29 22:10 test3.c
    -rw-r--r-- 1 melmouja users 2646 2005-09-29 22:10 test3.c~
    -rw-r--r-- 1 melmouja users 2560 2005-09-29 22:10 test3.o
    -rw-r--r-- 1 melmouja users 3245 2005-09-29 22:12 titi.c
    -rw-r--r-- 1 melmouja users 3237 2005-09-29 22:11 titi.c~
    -rw-r--r-- 1 melmouja users 2212 2005-09-29 22:11 titi.o
    -rwxr-xr-x 1 melmouja users 12171 2005-09-29 22:11 tot
    -rwxr--r-- 1 melmouja users 72 2005-07-28 20:25 toto.sh
    -rwxr--r-- 1 melmouja users 158 2005-06-19 21:56 validAlphaNum.sh

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut PB
    Bonsoir,


    Emmanuel a écrit:

    On devrait trouver le nom dans stat sinon, il faut faire une structure plus grande qui contient stat, mettre le nom (l'adresse suffit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct dossier {
         struct stat *sbuf = malloc (Max * sizeof *sbuf);
         int adresse=argv;
     }
    Merci d'avance

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: PB
    Citation Envoyé par melmouj
    On devrait trouver le nom dans stat sinon, il faut faire une structure plus grande qui contient stat, mettre le nom (l'adresse suffit)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct dossier {
         struct stat *sbuf = malloc (Max * sizeof *sbuf);
         int adresse=argv;
     }
    Pourquoi 'adresse' et non 'file_name' ou 'nom_fichier' ? Quand je dis 'adresse', c'est l'adresse de la chaine...
    Pourquoi int et non char * ?
    Pourquoi argv et non argv[i+1] ?
    Pourquoi ne pas réfléchir avant d'écrire ?
    Pourquoi ne pas vérifier ce qu'on a écrit ?
    Pourquoi ?
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut
    c'est ce que tu veux dire

    char *file_name=argv[i+1];

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par melmouj
    c'est ce que tu veux dire

    char *file_name=argv[i+1];
    Plus exactement :
    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
     
    struct data
    {
       struct stat stat;
       char *file_name;
    };
     
    {
       struct data *p_data = malloc ((argc - 1) * sizeof *p_data);
     
       ...
       for (i = ...)
       {
          stat(...);
          p_data[i].file_name =  argv[i + 1];
       }
    Je ne vais pas tout écrire quand même...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    struct data *p_data = malloc((argc - 1) * sizeof *p_data);
    Si je ne me trompe...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Médinoc
    struct data *p_data = malloc((argc - 1) * sizeof *p_data);
    Si je ne me trompe...
    Oui, corrigé. Merci.
    Pas de Wi-Fi à la maison : CPL

  17. #17
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut
    je comprend ce que veut dire Medinoc:

    Citation:
    struct data *p_data = malloc((argc - 1) * sizeof *p_data);

    Si je ne me trompe...

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par melmouj
    je comprend ce que veut dire Medinoc:

    Citation:
    struct data *p_data = malloc((argc - 1) * sizeof *p_data);

    Si je ne me trompe...
    J'avais oublié 'malloc', Rien que ça!
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 166
    Points : 39
    Points
    39
    Par défaut
    une question ?
    si je ne me trompe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    p_data[i].file_name=argv[i+1];
     
    ou plutot
     
    p_data[i]->file_name=argv[i+1];

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par melmouj
    une question ?
    si je ne me trompe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    p_data[i].file_name=argv[i+1];
     
    ou plutot
     
    p_data[i]->file_name=argv[i+1];
    Oui.
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Obtenir des informations sur un fichier
    Par stalacta dans le forum Général Python
    Réponses: 8
    Dernier message: 25/01/2014, 10h55
  2. Sortie des informations sur un fichier
    Par ayoubnour dans le forum Langage
    Réponses: 5
    Dernier message: 15/06/2009, 09h00
  3. Obtenir des informations sur un fichier
    Par Just dans le forum Langage
    Réponses: 1
    Dernier message: 19/02/2008, 10h42
  4. Réponses: 8
    Dernier message: 13/07/2006, 01h17
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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