if(S_ISREG(stat_info.st_mode)) { //file is regular }
if(stat(d_name, &stat_file) != 0) { debug("Erreur retournee par "stat()"."); return -1; } if( S_ISFIFO(stat_file.st_mode)) exit(-1); if( S_ISLNK(stat_file.st_mode)) exit(-1); if( S_ISDIR(stat_file.st_mode)) { printf("dir : %s\n", d_name); nb_dossier++; liste_dossier = (char**)ajouter_ligne( liste_dossier , d_name, nb_dossier); } if(S_ISREG(stat_file.st_mode)) { printf("reg : %s\n", d_name); nb_fichier++; liste_fichier = (char**)ajouter_ligne(liste_fichier, (*inf).d_name,nb_fichier); }
dir : /dev/fd // >> Lien vers dossier (inode/directory) reg : /dev/core dir : /dev/pts dir : /dev/mapper dir : /dev/input dir : /dev/bus dir : /dev/net dir : /dev/pktcdvd dir : /dev/bus/usb dir : /dev/bus/usb/002 dir : /dev/bus/usb/001 dir : /dev/disk/by-label dir : /dev/disk/by-uuid dir : /dev/disk/by-path dir : /dev/disk/by-id reg : /dev/fd/3 // >> Lien vers connecteur réseau (inode/socket) dir : /dev/fd/4 // >> Lien vers tube (inode/fifo)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionint main() { start_scan("/"); return 0; }
#include <string.h> #include <stdlib.h> #include <dirent.h> #include <sys/types.h> #include <sys/stat.h> #include #include <stdio.h> #define MAX 512 int start_scan(char *chemin_complet) { DIR *d_racine NULL, *d_dossier NULL; struct dirent *inf; FILE *f_fichier NULL, *f_dossier NULL;; char message[255]; char d_name[MAX]; char **liste_dossier NULL, **liste_fichier NULL; int nb_dossier 0, nb_fichier 0, i; struct stat stat_file; char *pSeek = NULL; if( (d_racine = opendir(chemin_complet)) != NULL ) { while(inf = readdir(d_racine)) { if( (strcmp((*inf).d_name, ".") != 0) && (strcmp((*inf).d_name, "..") != 0) ) { strcpy(d_name, chemin_complet); strcat(d_name, "/"); strcat(d_name, (*inf).d_name); while( (pSeek =strstr(d_name, "//")) != NULL) // supprime les doubles "//" { strcpy(message, pSeek+2); *(pSeek+1) = '\0'; strcat(d_name, message); } if(stat(d_name, &stat_file) != 0) { printf("Erreur retournee par "stat(%s)".\n", d_name); //debug("Erreur retournee par "stat(%s)".", d_name); //return -1; } if( S_ISFIFO(stat_file.st_mode)) exit(-1); if( S_ISLNK(stat_file.st_mode)) exit(-1); if( S_ISDIR(stat_file.st_mode)) { printf("dir : %s\n", d_name); if(start_scan(d_name) != 0) { sprintf(message, "%s (%d):\n> Erreur retournee par Start_scan(%s).", __FILE__, __LINE__, d_name); puts(message);//erreur(message); return -1; } //nb_dossier++; //liste_dossier = (char**)ajouter_ligne( liste_dossier , d_name, nb_dossier); } if(S_ISREG(stat_file.st_mode)) { printf("reg : %s\n", d_name); //nb_fichier++; //liste_fichier = (char**)ajouter_ligne(liste_fichier, (*inf).d_name, nb_fichier); } } } closedir(d_racine); } else { sprintf(message, "%s (%d):\n> Erreur lors de l'ouverture du dossier "%s".", __FILE__, __LINE__, chemin_complet); puts(message); //erreur(message); exit(-1); //return -1; } return 0; }