#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>

// une macro définition
// attention ce n'est pas une fonction!
#define LISIBLE_PAR_L_UTILISATEUR(m) (m&S_IRUSR)

int main(int argc,char *argv[]) {
  struct dirent *de;
  struct stat infos;
  // Ouvertuyre du répertoire courant en lecture
  DIR *dir = opendir(".");
  if (dir==NULL) { perror("probleme avec ."); exit(1); }
  // Lecture itérative d'entrée de répertoire
  while ( (de=readdir(dir)) != NULL) {
    // Récupération des méta-informations associées à l'inœud associé à la référence donnée
    if (stat(de->d_name,&infos)!=-1) {
      // Affichage de différentes informations
      printf("%lld %c%c%c%c %d %4d %12lld %s\n",
             infos.st_ino,
             S_ISDIR(infos.st_mode)?'d':'-',
             LISIBLE_PAR_L_UTILISATEUR(infos.st_mode)?'r':'-',
             (infos.st_mode&S_IWUSR)?'w':'-',
             (infos.st_mode&S_IXUSR)?'x':'-',
             infos.st_uid,
             infos.st_nlink,
             infos.st_size,
             de->d_name);
    }
  }
  // Libération des ressources associées
  closedir(dir);

  exit(0);
}