Proprietaire de fichier

Proprietaire de fichier - C - Programmation

Marsh Posté le 31-12-2004 à 11:39:50    

salut a tous,
je dois réaliser une fonction qui compte pour chaque propriétaire de fichier le nombre de fichiers qu'il possède.
 
ex : /mon repertoire root(45) moi(1) lotre(4)
 
J'ai réalisé deja une fonction mais elle marche pas  :sweat:  
ca a lair un problème de tableau mais jarrive pas a résoudre :s
est ce que quelq'un peut maider svp
 

Code :
  1. void afficherFichier(char *repertoire){
  2.   int tabNb[30];
  3.   char** tabUser;
  4.   char *user;
  5.   int cpt=0;int k;
  6.   int temp=0;
  7.   DIR *rep;
  8.   struct dirent *liste;
  9.   struct stat sts;
  10.   struct passwd *pass;
  11.   char nomrep[NAME_MAX+1] ;
  12.   char nom[30];
  13.   tabUser = malloc(30 * sizeof(char *));
  14.   for(k=0;k<30;k++) strcpy(tabUser[k],"" );
  15.   rep=opendir(repertoire);
  16.   if(rep==NULL){
  17.     printf("Erreur de répertoire 2 : %s\n",repertoire);
  18.   }
  19.   else{
  20.   while((liste=readdir(rep))!=NULL){
  21.     sprintf(nomrep,"%s/%s",repertoire,liste->d_name);
  22.     stat(nomrep,&sts);
  23.     if (((strcmp(liste->d_name,"." )!=0)&&
  24.  (strcmp("..",liste->d_name)!=0)&&
  25.  !S_ISDIR(sts.st_mode))){
  26.  pass = getpwuid(sts.st_uid);
  27.          user = malloc((strlen(pass->pw_name)+1) * sizeof(char));
  28.  strcpy(user,pass->pw_name);
  29.          while((temp<cpt)&&(strcmp(tabUser[temp],user)!=0)) temp++;
  30.          if(strcmp(tabUser[temp],user)==0){
  31.   tabUser[cpt]=malloc((strlen(user)+1) * sizeof(char));
  32.   strcpy(tabUser[cpt],pass->pw_name);
  33.   tabNb[cpt]=tabNb[cpt]+1;
  34.   cpt++;
  35.          }
  36.        temp=0;
  37.     }
  38.   }
  39.   printf("%s :\n",nomrep);
  40.   temp=0;
  41.   while(temp<cpt){
  42.     printf("%s(%d)\n",tabUser[temp],tabNb[temp]);
  43.     temp++;
  44.   }
  45.   } 
  46.   closedir(rep);
  47. }

Reply

Marsh Posté le 31-12-2004 à 11:39:50   

Reply

Marsh Posté le 31-12-2004 à 12:08:35    

C'est quoi ta structure sts et ta macro S_ISDIR ?

Reply

Marsh Posté le 31-12-2004 à 12:21:25    

S_ISDIR permet de tester si un fichier est un répertoire ou pas  
sts est un structure rempli par par la fonction stat qui renvoi ainsi diverses informations sur le fichier

Reply

Marsh Posté le 31-12-2004 à 12:29:46    

ca pourrait etre pas mal si on les avait


Message édité par fafounet le 31-12-2004 à 12:30:04
Reply

Marsh Posté le 31-12-2004 à 12:33:29    

fafounet a écrit :

ca pourrait etre pas mal si on les avait


 

Code :
  1. struct stat {
  2.                   dev_t         st_dev;      /* Périphérique                */
  3.                   ino_t         st_ino;      /* Numéro i-noeud              */
  4.                   mode_t        st_mode;     /* Protection                  */
  5.                   nlink_t       st_nlink;    /* Nb liens matériels          */
  6.                   uid_t         st_uid;      /* UID propriétaire            */
  7.                   gid_t         st_gid;      /* GID propriétaire            */
  8.                   dev_t         st_rdev;     /* Type périphérique           */
  9.                   off_t         st_size;     /* Taille totale en octets     */
  10.                   blksize_t     st_blksize;  /* Taille de bloc pour E/S     */
  11.                   blkcnt_t      st_blocks;   /* Nombre de blocs alloués     */
  12.                   time_t        st_atime;    /* Heure dernier accès         */
  13.                   time_t        st_mtime;    /* Heure dernière modification */
  14.                   time_t        st_ctime;    /* Heure dernier changement    */
  15.               };


 

Code :
  1. Les macros POSIX suivantes sont fournies pour vérifier le type de fichier :
  2.                                                                                                                            
  3.               S_ISREG(m)  un fichier régulier ?
  4.                                                                                                                            
  5.               S_ISDIR(m)  un répertoire ?
  6.                                                                                                                            
  7.               S_ISCHR(m)  un péripherique en mode caractère ?
  8.                                                                                                                            
  9.               S_ISBLK(m)  un périphérique en mode blocs ?
  10.                                                                                                                            
  11.               S_ISFIFO(m) une FIFO ?
  12.                                                                                                                            
  13.               S_ISLNK(m)  est-ce un lien symbolique ? (Pas dans POSIX.1-1996).
  14.                                                                                                                            
  15.               S_ISSOCK(m) une socket ? (Pas dans POSIX.1-1996).

Reply

Marsh Posté le 31-12-2004 à 12:38:10    

J'ai ce message :  error: erreur de syntaxe before "blksize_t"

Reply

Marsh Posté le 31-12-2004 à 12:40:37    

heu moi j'ai pas d'erreur sur ce point la.
Vous avez obtenu cette erreur comment ?
je pense que mon erreur vient de la construction de mes tableaux tabUser et tabNb

Reply

Marsh Posté le 31-12-2004 à 12:42:40    

precision vu que ces fonctions sont d'assez bas niveau je ne pense pas qu'elle fonctionne sous windows( je suis sous linux moi)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed