Logo
IT Dienstleistungen

File Informations

reads some attributs from the given file(s), prints it quite nicely on the console. same job could be done with gnutools, but shows some examples of reading the attributes and working with them in C

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pwd.h>
 
int main(int argc, char* argv[]) {
    if (argc <2 ) {
      printf("\tAufruf: %s <DATEINAME>",argv[0]);
      return 1;
    }
 
    /*variablen*/
    int i=1, result=0;
 
    /*Status Buffer*/
    struct stat buffer;
      int status;
 
   /*Konstanten fuer Zugriffsrechte*/
   const char *rwx = "rwxrwxrwx";
        int bits[]= {
         S_IRUSR,S_IWUSR,S_IXUSR,/*Zugriffsrechte User*/
         S_IRGRP,S_IWGRP,S_IXGRP,/*Zugriffsrechte Gruppe*/
         S_IROTH,S_IWOTH,S_IXOTH /*Zugriffrechte der Rest*/
    };
 
    /*Alle Angegebenen Dateien durchgehen*/
    for (i; i<argc; i++) {
 
      /*Darstellung Zugriffsrechte*/
          char l_rwx[10];
          l_rwx[9] = '\0';
 
      /*Filepointer zuweisen*/
      if (stat(argv[i], &buffer) == -1 ) {
          printf("%d: Datei-information fuer %s konnte nicht gelesen werden\n", argc, argv[i]);  
          continue;
        }
        /*Ausgabe der Dateininformationen*/
        else {
          struct passwd *passwd;
          passwd = getpwuid (buffer.st_uid);
          printf(" \n\n* [ %16s ] ****************************************************\n*\n", argv[i]);
          printf("* Datei\t\t\t\t: %s\n",                       argv[i]);
          printf("* Dateigroesse\t\t\t: %d Bytes\n",            buffer.st_size);
          printf("* Besitzer\t\t\t: %s, Login: %s, ID: %d\n",   passwd->pw_gecos,passwd->pw_name,buffer.st_uid);
          printf("* Inode-Nr.\t\t\t: %d\n",                     buffer.st_ino);
          printf("* letzter Zugriff\t\t: %s",                   ctime(&buffer.st_atime));
          printf("* letzte Aenderung\t\t: %s",                  ctime(&buffer.st_ctime));
          printf("* letzte Inode Aenderung\t: %s",              ctime(&buffer.st_mtime));
          printf("* Zugriffsrechte\t\t: ["); /*Hier Zugriffsrechte einfuegen*/
 
        /* Einfache Zugriffsrechte erfragen */
          int j;
          l_rwx[0]='\0';
            for(j=0; j<9; j++) { /*Wenn nicht 0, dann gesetzt*/
                l_rwx[j]=(buffer.st_mode & bits[j]) ? rwx[j] : '-';
            }
          l_rwx[9]='\0';
             printf("%s]\n",l_rwx);
        }
    }
  printf("\n\n %d Dateien ausgelesen,\n\n",argc-1);
  return 0;
}

Seiten-Werkzeuge