From 794cc3fdd32e713145a2aa55c7a34c91d2a8fa5f Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Wed, 22 Dec 2010 16:37:36 -0500 Subject: lsof: Add support for printing open files for a single process Change-Id: If2afa0937064dffca6df2a8642ca75009dc6e70e Signed-off-by: Mike Lockwood --- toolbox/lsof.c | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) (limited to 'toolbox/lsof.c') diff --git a/toolbox/lsof.c b/toolbox/lsof.c index 99891dbf..c55384bb 100644 --- a/toolbox/lsof.c +++ b/toolbox/lsof.c @@ -196,28 +196,37 @@ void lsof_dumpinfo(pid_t pid) int lsof_main(int argc, char *argv[]) { - DIR *dir = opendir("/proc"); - if (dir == NULL) { - fprintf(stderr, "Couldn't open /proc\n"); - return -1; + long int pid = 0; + char* endptr; + if (argc == 2) { + pid = strtol(argv[1], &endptr, 10); } print_header(); - struct dirent* de; - while ((de = readdir(dir))) { - if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) - continue; - - // Only inspect directories that are PID numbers - char* endptr; - long int pid = strtol(de->d_name, &endptr, 10); - if (*endptr != '\0') - continue; - + if (pid) { lsof_dumpinfo(pid); + } else { + DIR *dir = opendir("/proc"); + if (dir == NULL) { + fprintf(stderr, "Couldn't open /proc\n"); + return -1; + } + + struct dirent* de; + while ((de = readdir(dir))) { + if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) + continue; + + // Only inspect directories that are PID numbers + pid = strtol(de->d_name, &endptr, 10); + if (*endptr != '\0') + continue; + + lsof_dumpinfo(pid); + } + closedir(dir); } - closedir(dir); return 0; } -- cgit v1.2.3