lsmod.c - ubase - suckless linux base utils
(HTM) git clone git://git.suckless.org/ubase
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
lsmod.c (1357B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "text.h"
7 #include "util.h"
8
9 static void parse_modline(char *buf, char **name, char **size,
10 char **refcount, char **users);
11
12 static void
13 usage(void)
14 {
15 eprintf("usage: %s\n", argv0);
16 }
17
18 int
19 main(int argc, char *argv[])
20 {
21 const char *modfile = "/proc/modules";
22 FILE *fp;
23 char *buf = NULL;
24 char *name, *size, *refcount, *users;
25 size_t bufsize = 0;
26 size_t len;
27
28 ARGBEGIN {
29 default:
30 usage();
31 } ARGEND;
32
33 if (argc > 0)
34 usage();
35
36 fp = fopen(modfile, "r");
37 if (!fp)
38 eprintf("fopen %s:", modfile);
39
40 printf("%-23s Size Used by\n", "Module");
41
42 while (agetline(&buf, &bufsize, fp) != -1) {
43 parse_modline(buf, &name, &size, &refcount, &users);
44 if (!name || !size || !refcount || !users)
45 eprintf("invalid format: %s\n", modfile);
46 len = strlen(users) - 1;
47 if (users[len] == ',' || users[len] == '-')
48 users[len] = '\0';
49 printf("%-20s%8s%3s %s\n", name, size, refcount,
50 users);
51 }
52 if (ferror(fp))
53 eprintf("%s: read error:", modfile);
54 free(buf);
55 fclose(fp);
56 return 0;
57 }
58
59 static void
60 parse_modline(char *buf, char **name, char **size,
61 char **refcount, char **users)
62 {
63 *name = strtok(buf, " ");
64 *size = strtok(NULL, " ");
65 *refcount = strtok(NULL, " ");
66 *users = strtok(NULL, " ");
67 }