Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Offene Dateien eines Prozesses

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.05.2005
    Ort
    Dortmund
    Beiträge
    31

    Offene Dateien eines Prozesses

    Hat jemand eine Ahnung, wie ich in C unter Linux an die offenen Dateien herankommen kann, die zu einem bestimmten Prozess gehören?!

    Mfg, Lord Kefir

  2. #2
    Registrierter Benutzer
    Registriert seit
    04.05.2005
    Ort
    Dortmund
    Beiträge
    31
    Okay - habe beim googeln nichts gefunden und einfach ein wenig herumgefrickelt. Hier mein Ansatz (nicht schön - habe es einfach so runtergerattert):

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #include <string.h>
    #include <ctype.h>
    #include <dirent.h>
    #include <sys/stat.h>
    #include <unistd.h>
    
    #define BUFFER_SIZE 500
    
    /* ----------------------------------------------
         function: isnumeric
       ---------------------------------------------- */
    bool
    isnumeric (const char *string)
    {
      short i = 0;
      bool result = true;
    
      while (i < strlen (string) && result)
        {
          if (!isdigit (string[i]))
     result = false;
          ++i;
        }
    
      return (result);
    }
    
    /* ----------------------------------------------
         function: main
       ---------------------------------------------- */
    int
    main (int argc, char *argv[])
    {
      DIR *dir1, *dir2;
      struct dirent *dir_info1, *dir_info2;
      char filename1[100], filename2[100];
      char buffer[BUFFER_SIZE];
      struct stat attr;
    
      // /proc öffnen:
      if ((dir1 = opendir ("/proc")) == NULL)
        {
          fprintf (stderr, "Fehler.\n");
          exit (1);
        }
    
      // alle numerischen Ordner durchgehen:
      while ((dir_info1 = readdir (dir1)) != NULL)
        {
          if (isnumeric (dir_info1->d_name))
     {
       sprintf (filename1, "/proc/%s/fd/", dir_info1->d_name);
              // alle Dateien unter /proc/pid/fd/ prüfen:
       if ((dir2 = opendir (filename1)) != NULL)
         {
           while ((dir_info2 = readdir (dir2)) != NULL)
      {
        if (isnumeric (dir_info2->d_name))
          {
            sprintf (filename2, "%s%s", filename1,
              dir_info2->d_name);
            memset (buffer, 0, BUFFER_SIZE);
            readlink (filename2, buffer, BUFFER_SIZE);
            if ((stat (buffer, &attr) == 0))
       {
         if (attr.st_mode & S_IFREG)
           {
             printf ("%s\n", buffer);
           }
       }
          }
      }
           closedir (dir2);
         }
     }
        }
      closedir (dir1);
    
      return (0);
    }
    Mfg, Lord Kefir
    Geändert von Lord Kefir (16-08-2005 um 21:16 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.05.2001
    Beiträge
    88
    ;)

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.05.2005
    Ort
    Dortmund
    Beiträge
    31
    Würde ich diesbezüglich nicht unter akuter Faulheit leiden, dann hätte ich dies auch getan

    Mfg, Lord Kefir

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •