Add lsmod(8)

No manpage yet.
This commit is contained in:
sin 2013-08-09 10:23:40 +01:00
parent 691c4ae503
commit 92895baad0
2 changed files with 61 additions and 0 deletions

View File

@ -19,6 +19,7 @@ SRC = \
ifeq ($(OS),linux)
SRC += \
insmod.c \
lsmod.c \
rmmod.c
endif

60
lsmod.c Normal file
View File

@ -0,0 +1,60 @@
/* See LICENSE file for copyright and license details. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "util.h"
static void parse_modline(char *buf, char **name, char **size,
char **refcount, char **users);
static void
usage(void)
{
eprintf("usage: %s\n", argv0);
}
int
main(int argc, char *argv[])
{
const char *modfile = "/proc/modules";
FILE *fp;
char buf[BUFSIZ];
char *name, *size, *refcount, *users;
size_t len;
ARGBEGIN {
default:
usage();
} ARGEND;
if (argc > 0)
usage();
printf("%-23s Size Used by\n", "Module");
fp = fopen(modfile, "r");
if (!fp)
eprintf("fopen %s:", modfile);
while (fgets(buf, sizeof buf, fp)) {
parse_modline(buf, &name, &size, &refcount, &users);
if (!name || !size || !refcount || !users)
enprintf(1, "invalid format: %s\n", modfile);
len = strlen(users) - 1;
if (users[len] == ',' || users[len] == '-')
users[len] = '\0';
printf("%-20s%8s%3s %s\n", name, size, refcount,
users);
}
fclose(fp);
return 0;
}
static void
parse_modline(char *buf, char **name, char **size,
char **refcount, char **users)
{
*name = strtok(buf, " ");
*size = strtok(NULL, " ");
*refcount = strtok(NULL, " ");
*users = strtok(NULL, " ");
}