Adding lsmod
authorElie De Brauwer <eliedebrauwer@gmail.com>
Sat, 18 Feb 2012 08:44:53 +0000 (09:44 +0100)
committerElie De Brauwer <eliedebrauwer@gmail.com>
Sat, 18 Feb 2012 08:44:53 +0000 (09:44 +0100)
toys/lsmod.c [new file with mode: 0644]

diff --git a/toys/lsmod.c b/toys/lsmod.c
new file mode 100644 (file)
index 0000000..7f588c8
--- /dev/null
@@ -0,0 +1,49 @@
+/* vi: set sw=4 ts=4:
+ *
+ * lsmod.c - Show the status of modules in the kernel
+ *
+ * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
+ *
+ * Not in SUSv4.
+
+USE_FREE(NEWTOY(lsmod, NULL, TOYFLAG_BIN))
+
+config LSMOD
+       bool "lsmod"
+       default y
+       help
+         usage: lsmod
+
+         Display the currently loaded modules, their sizes and their
+         dependencies.
+*/
+
+#include "toys.h"
+
+void lsmod_main(void)
+{
+    FILE * file = fopen("/proc/modules", "r");
+    char *name, *size, *refcnt, *users;
+    if (!file)
+        perror_exit("cannot open /proc/moduls");
+
+    xprintf("%-24s Size  Used by\n", "Module");
+
+    while (fgets(toybuf, sizeof(toybuf), file)) {
+        int len;
+        name = strtok(toybuf, " ");
+        size = strtok(NULL, " ");
+               refcnt = strtok(NULL, " ");
+               users = strtok(NULL, " ");
+               if(name && size && refcnt && users) {
+                       len = strlen(users)-1;
+                       if (users[len] == ',' || users[len] == '-')
+                               users[len] = 0;
+                       xprintf("%-20s %8s  %s %s\n", name, size, refcnt, users);
+               } else {
+                       perror_exit("unrecognized input");
+                       break;
+               }
+       }
+       fclose(file);
+}