Date derniere modif unix

hello^^ -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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--
    0
    1. hello^^
       
      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?!
      0
    2. hello^^
       
      je souhaiterais recuperer cette forme la : fév 14 13:33 Nom_fichier
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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);
            }
    }
    
    0
    1. hello^^
       
      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
      0
      1. hello^^ > hello^^
         
        j'ai oublié de declarer mode mais justement il faut le declarer comment en struct??
        0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    que veux tu afficher ?
    0
    1. hello^^
       
      je veux afficher les droits pour chaque fichier
      0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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);
            }
    }
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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);
    0
    1. hello^^
       
      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;
      }
      0
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    0
    1. hello^^
       
      oui c'est celle la... mais je ne sais pas comment faire pour la calculer
      0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    je pense qu'il faut faire la somme de toutes les tailles des fichiers en octets et diviser par 1024
    0