Date derniere modif unix

Fermé
hello^^ - 13 févr. 2010 à 22:12
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 - 16 févr. 2010 à 14:37
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
A voir également:

7 réponses

dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
14 févr. 2010 à 08:46
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
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
je souhaiterais recuperer cette forme la : fév 14 13:33 Nom_fichier
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
14 févr. 2010 à 16:03
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
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
hello^^ > hello^^
14 févr. 2010 à 17:28
j'ai oublié de declarer mode mais justement il faut le declarer comment en struct??
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
15 févr. 2010 à 08:48
que veux tu afficher ?
0
je veux afficher les droits pour chaque fichier
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
15 févr. 2010 à 09:31
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
16 févr. 2010 à 13:46
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
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
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
16 févr. 2010 à 14:20
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
oui c'est celle la... mais je ne sais pas comment faire pour la calculer
0
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
16 févr. 2010 à 14:37
je pense qu'il faut faire la somme de toutes les tailles des fichiers en octets et diviser par 1024
0