1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#define PROC_PATH_MAX 512
int main()
{
struct dirent *entry;
DIR *dir = opendir("/proc"); // Open the /proc directory
if (dir == NULL)
{
perror("opendir");
return 1;
}
printf("PID\tName\t\tState\tMemory (KB)\n");
printf("-----------------------------------------\n");
while ((entry = readdir(dir)) != NULL)
{
if (isdigit(entry->d_name[0]))
{
char file_path[PROC_PATH_MAX];
snprintf(file_path, PROC_PATH_MAX, "/proc/%s/stat", entry->d_name);
FILE *fptr = fopen(file_path, "r");
if (fptr == NULL)
{
continue;
}
char buffer[1024];
if (fgets(buffer, sizeof(buffer), fptr) == NULL)
{
fclose(fptr);
continue;
}
int pid;
char comm[256];
char state;
long vsize, rss; // Virtual memory & Resident Set Size
sscanf(buffer, "%d %s %c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %lu %lu",
&pid, comm, &state, &vsize, &rss);
fclose(fptr);
printf("%d\t%-15s\t%c\t%ld KB\n", pid, comm, state, rss * 4);
}
}
closedir(dir);
return 0;
}