Date derniere modif unix

Bonjour,

est ce que qqun conner le code qui permet de connaitre la derniere date de modif d'un fichier en c sous unix
svp sa fait une heure que je cherche et j'ai tjs pas trouvé....apart stat mais sa maffiche pas le bon resultat^^

merci
Configuration: Windows Vista Internet Explorer 7.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    hello
    c'est bien stat, montre nous ton code
    struct stat {
    dev_t st_dev; /* ID of device containing file */
    ino_t st_ino; /* inode number */
    mode_t st_mode; /* protection */
    nlink_t st_nlink; /* number of hard links */
    uid_t st_uid; /* user ID of owner */
    gid_t st_gid; /* group ID of owner */
    dev_t st_rdev; /* device ID (if special file) */
    off_t st_size; /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t st_blocks; /* number of 512B blocks allocated */
    time_t st_atime; /* time of last access */
    time_t st_mtime; /* time of last modification */
    time_t st_ctime; /* time of last status change */
    };
    --More--
    1. j'ai fait sa :

      int main()
      {

      struct stat date;
      struct dirent *lecture;

      // Declaration des variables
      DIR *rep;
      char ladate[20];
      rep = opendir(".");

      while ((lecture = readdir(rep)))
      {

      if(lecture->d_name[0] != '.')
      {
      *ladate=date.st_mtime;
      printf(" %s %s \n",lecture->d_name,ladate);
      }
      }

      return 0;
      }

      et sa maffiche sa : TP2 ▒
      TP1 ▒

      je comprends pas trop pourquoi?!
    2. je souhaiterais recuperer cette forme la : fév 14 13:33 Nom_fichier
  2. Contributeur
    essaye
    #include <sys/types.h>
    #include <dirent.h>
    #include <stdio.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <time.h>
    
    main()
    {
            DIR * dirp;
            struct dirent *dirent;
            struct stat fstat;
            struct tm  *ts;
            char buf[100];
    
            dirp=opendir(".");
            while(dirent=readdir(dirp))
            {
                    stat(dirent->d_name, &fstat);
                    ts = localtime(&fstat.st_mtime);
                    strftime(buf, sizeof(buf), "%b %d %H:%M", ts);
                    printf("%s %s\n", buf, dirent->d_name);
            }
    }
    
    1. merci beaucoup sa fonctionne, j'ai un autre souci cette fois c'est d'afficher les permissions!

      int main()
      {

      struct stat privilege;
      struct dirent *lecture;

      DIR *rep;
      int filesize,liens;
      char user[3];
      char group[3];
      char other[3];

      rep = opendir(".");

      while ((lecture = readdir(rep)))
      {

      if(lecture->d_name[0] != '.')
      {
      stat(lecture->d_name,&privilege);

      /* Droits pour l'utilisateur :*/
      user[0]=(mode & S_IRUSR) ? printf("r") : printf("-");
      user[1]=(mode & S_IWUSR) ? printf("w") : printf("-");
      user[2]=(mode & S_IXUSR) ? printf("x") : printf("-");

      /* Droits pour le groupe :*/
      group[0]=(mode & S_IRGRP) ? printf("r") : printf("-");
      group[1]=(mode & S_IWGRP) ? printf("w") : printf("-");
      group[2]=(mode & S_IXGRP) ? printf("x") : printf("-");

      /* Droits pour les autres :*/
      other[0]=(mode & S_IROTH) ? printf("r") : printf("-");
      other[1]=(mode & S_IWOTH) ? printf("w") : printf("-");
      other[2]=(mode & S_IXOTH) ? printf("x") : printf("-");

      printf(" %s %s %s %s \n",lecture->d_name,user,group,other);
      }
      }

      return 0;
      }

      quand je fais sa il me sort : --x-w---- TP2
      --x-w---- TP1

      c'est quoi qui va pas?
      merci
    2. @hello^^j'ai oublié de declarer mode mais justement il faut le declarer comment en struct??
  3. Contributeur
    que veux tu afficher ?
    1. je veux afficher les droits pour chaque fichier
  4. Contributeur
    user,group,other sont des tableaux, tu dois imprimer chaque élement, avec [], mais les droits ont déjà été imprimés

    #include <sys/types.h>
    #include <dirent.h>
    #include <stdio.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    main()
    {
            DIR * dirp;
            struct dirent *dirent;
            struct stat fstat;
            struct tm  *ts;
            char buf[100];
    
            dirp=opendir(".");
            while(dirent=readdir(dirp))
            {
                    stat(dirent->d_name, &fstat);
                    (fstat.st_mode & S_IRUSR) ? printf("r") : printf("-");
                    (fstat.st_mode & S_IWUSR) ? printf("w") : printf("-");
                    (fstat.st_mode & S_IXUSR) ? printf("x") : printf("-");
                    (fstat.st_mode & S_IRGRP) ? printf("r") : printf("-");
                    (fstat.st_mode & S_IWGRP) ? printf("w") : printf("-");
                    (fstat.st_mode & S_IXGRP) ? printf("x") : printf("-");
                    (fstat.st_mode & S_IROTH) ? printf("r") : printf("-");
                    (fstat.st_mode & S_IWOTH) ? printf("w") : printf("-");
                    (fstat.st_mode & S_IXOTH) ? printf("x") : printf("-");
    
                    printf("  %s\n", dirent->d_name);
            }
    }
    
    1. Contributeur
      User,group,other sont des tableaux, tu dois imprimer chaque élement, avec []
      je me suis mal exprimé.
      dans ton cas, tu devrais faire:
      char user[4];
      char group[4];
      char other[4];
      ...
      /* Droits pour l'utilisateur :*/
      (mode & S_IRUSR) ? user[0]='r' : user[0]='-';
      (mode & S_IWUSR) ? user[1]='w' : user[1]='-';
      (mode & S_IXUSR) ? user[2]='x' : user[2]='-';
      user[3]='\0';
      ...
      printf(" %s %s %s %s \n",lecture->d_name,user,group,other);
      1. bonjour,

        c'est bon merci, par contre j'ai un autre souci, jessaye de recuperer la taille qu'il y a ds ls -l a la 1ere ligne et sa maffiche pas un bon chiffre j'ai fait :

        #include <sys/types.h>
        #include <sys/stat.h>
        #include <unistd.h>
        #include <fcntl.h>
        #include <dirent.h>
        #include <pwd.h>
        #include <grp.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>

        int main()
        {

        struct stat total;
        struct dirent *lecture;

        DIR* rep;
        int letotal;
        char x[10]=".";
        rep = opendir(".");

        stat(x,&total);
        letotal=(total.st_blocks);
        printf("total %d\n",letotal);

        while ((lecture = readdir(rep)))
        {

        if(lecture->d_name[0] != '.')
        {
        printf("%s\n",lecture->d_name);
        }
        }
        return 0;
        }
    2. Contributeur
      cette ligne là ?
      $ ls -l
      total 140
      ...
      je crois que c'est une somme des blocks, il faut la calculer, elle n'est pas dans stat
      1. oui c'est celle la... mais je ne sais pas comment faire pour la calculer
    3. Contributeur
      je pense qu'il faut faire la somme de toutes les tailles des fichiers en octets et diviser par 1024