Date derniere modif unix
hello^^
-
dubcek Messages postés 18627 Date d'inscription Statut Contributeur Dernière intervention -
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
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
-
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--
-
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?! -
-
-
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); } }-
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
-
-
que veux tu afficher ?
-
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); } } -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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);-
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;
}
-
-
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 -
je pense qu'il faut faire la somme de toutes les tailles des fichiers en octets et diviser par 1024