Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/09/2006, à 01:15

*Serval

[Résolu] Problème TimeStamp en C

Salut à tous


J'ai un problème avec mon timestamp en C

Voici l'énoncé d'un exam d'il y a 3jours... J'ai un similaire tantôt à 8h30

1. Concevez un programme C qui parcourt l'arborescence dont la racine est reçue en premier argument et y recherche tous les programmes plus récents que la date reçue en 2ème arguement sous la forme YYMMDD. Le programme affichera à la sortie standard les chemins de tous les programmes trouvés à partir de et y compris la racine recue en argument. Pour information, dans /usr/include/sys/types.h , on trouve :

#if !defined(_TIME_T) || __cplusplus >= 199711L
#define _TIME_T
typedef long time_t; /*time of day in seconds*/
#endif /* _TIME_T */

Seulement le timestamp affiché est -1995840000 quand je passe en second argu 060904 (donc hier)...
Du coup tous les fichiers sont affichés. Vous voyez mon erreur (surement dans la main)? (code en fin de post)


Sinon, il parle d'afficher les "programmes"... Ca signifie les fichiers chmodé en +x ?
Si oui, comment vérifier ça ? (avec stat ??)



Merci d'avance pour votre aide smile

*Serval



Code :

#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
#include <time.h>
#include <string.h>



void myscandir(char *source,time_t *date)
{
	// Ouverture dossier
	DIR *folder = opendir(source);
	if (folder != NULL)
	{
		struct dirent *file;
		// Listing des fichiers
		while (file = readdir(folder))
		{

			if( strncmp(file->d_name, ".", 1) != 0 ) // passer les "fichiers" . et ..
			{
		
				// Récupérer les information sur un fichier
				struct stat fileInfo;
				char filePath[(strlen(source) + strlen(file->d_name) + 1)];
				strcpy(filePath, source);
				strcpy(filePath + strlen(source), "/");
				strcpy(filePath + strlen(source) + 1, file->d_name);
				stat(filePath, &fileInfo);

				if( S_ISDIR (fileInfo.st_mode)) // si c'est un dir ...
				{
					myscandir(filePath, date); // ...on rappelle la fonction récursivement
				}
				else
				{
					if(fileInfo.st_mtime > *date) // si la date de modif du fichier est plus récente que la date entrée
					{
						printf("%s \n", filePath);
						printf("%d \n", *date); // TEST A DELETER
					}
				}
			}
		}
	}
}


int main(int argv, char** argc)
{
	if(argv != 3) // Il faut 2 arguments
	{
		return -1;
	}
	struct tm date;
	time_t timedate;
	char tmp[2];
	date.tm_sec = 0;
	date.tm_min = 0;
	date.tm_hour = 0;
	strncpy(tmp, argc[2], 2);
	date.tm_year = atoi(tmp);
	strncpy(tmp, argc[2]+2, 2);
	date.tm_mon = atoi(tmp);
	strncpy(tmp, argc[2]+4, 2);
	date.tm_mday = atoi(tmp);
	timedate = mktime ( & date ); // timestamp de la date passée en second arg
	myscandir(argc[1],&timedate); // on appelle myscandir
	return 0;
}

Dernière modification par *Serval (Le 16/09/2006, à 23:39)

Hors ligne

#2 Le 05/09/2006, à 10:46

tigrou

Re : [Résolu] Problème TimeStamp en C

D'après la pages du manuel de la fonction mktime, le membre tm_year est le nombre d'années depuis 1900 donc pour 2006, ce nombre d'année est 106 pas 6. C'est le bug de l'an 2000 smile que tu as reproduit !

Pour ce qui est des permissions, d'après la page du manuel de stat, cet appel système remplit une structure dont l'un des membres est st_mode qui indique pas mal d'information sur le fichier, normalement avec ça, tu devrais pouvoir te débrouiller...

Hors ligne

#3 Le 16/09/2006, à 23:38

*Serval

Re : [Résolu] Problème TimeStamp en C

Merci pour tes réponses, j'ai eu le temps de vite les lire avant mon exam et ca m'a bien aidé wink


Pas eu le temps de te remercier plus tôt, je suis parti en vacances direct après cool




Encore merci smile

Hors ligne