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
Lesezeichen