Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/04/2007, 14h15   #1
Invité de passage
 
Inscription : avril 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 5
Points : 3
Points : 3
Par défaut [2.6.1*][C] manipulation fichier et repertoire

Bonjour,

Je cherche un moyen de parcourir une arborescence (repertoire, liens et fichiers). Il me faut que ce soit POSIX donc je suis parti sur opendir et readdir. J'ai bien les noms (champs d_name) mais d'aprés le man si les fonction sont POSIX la structure dirent ne l'est pas entierement. Tous les champs (d_name exceptés) sont sans garanti. Ma question : Une fois que j'ai recupéré un nom comment puis-je faire pour savoir si c'est un rep ou un file ?

Merci
sbenoit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 15h15   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
regarde le man 3 readdir, celle-ci est POSIX ....
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2007, 15h42   #3
Invité de passage
 
Inscription : avril 2007
Messages : 5
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 5
Points : 3
Points : 3
Effectivement readdir est posix comme je l'ai ecrit dans mon post. Et d'ailleurs grace a cette fonction j'ai bien le nom des "elements" presents dans les repertoires, mais je n'ai que les noms de garanti.

Je viens juste de trouver ce qui me manque : stat.

en fait en associant readdir, stat et les macro S_ISDIR/S_ISREG j'arrive à mon but. Voici un example de code au cas ou ca pourrait aider qqun.

int main(int argc, char **argv)
{
DIR *CurrentDir = NULL;

CurrentDir = opendir(argv[1]);
if(CurrentDir != NULL)
{
struct dirent *Entrie = NULL;

do
{
Entrie = readdir(CurrentDir);
if(Entrie != NULL)
{
struct stat fileAttr;
char *FullName;

FullName = malloc(strlen(argv[1]) + strlen(Entrie->d_name) + 5);
sprintf(FullName, "%s/%s", argv[1], Entrie->d_name);
stat(FullName, &fileAttr);
printf("-> %s (%s)", Entrie->d_name, FullName);
printf(" directory = %s file = %s \n", (S_ISDIR(fileAttr.st_mode)) ? "yes" : "no", (S_ISREG(fileAttr.st_mode)) ? "yes" : "no");
free(FullName);
}
}while(Entrie != NULL);
}
else
printf("Ca ne marche pas !!!\n");

return(0);
}

Merci
sbenoit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h13.


 
 
 
 
Partenaires

Hébergement Web