Loading toolbox/lsof.c +29 −7 Original line number Diff line number Diff line Loading @@ -37,11 +37,16 @@ #include <stdlib.h> #include <unistd.h> #include <pwd.h> #include <sys/stat.h> #define BUF_MAX 1024 #define CMD_DISPLAY_MAX 10 #define CMD_DISPLAY_MAX (9 + 1) #define USER_DISPLAY_MAX (10 + 1) struct pid_info_t { pid_t pid; char user[USER_DISPLAY_MAX]; char cmdline[CMD_DISPLAY_MAX]; Loading Loading @@ -82,7 +87,8 @@ void print_type(char *type, struct pid_info_t* info) if (!strcmp(link_dest, "/")) goto out; printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, "???", type, printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, info->user, type, "???", "???", "???", "???", link_dest); out: Loading Loading @@ -113,7 +119,8 @@ void print_maps(struct pid_info_t* info) if (inode == 0 || !strcmp(device, "00:00")) continue; printf("%-9s %5d %10s %4s %9s %18s %9zd %10ld %s\n", info->cmdline, info->pid, "???", "mem", printf("%-9s %5d %10s %4s %9s %18s %9zd %10ld %s\n", info->cmdline, info->pid, info->user, "mem", "???", device, offset, inode, file); } Loading @@ -136,7 +143,8 @@ void print_fds(struct pid_info_t* info) if (dir == NULL) { char msg[BUF_MAX]; snprintf(msg, sizeof(msg), "%s (opendir: %s)", info->path, strerror(errno)); printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, "???", "FDS", printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, info->user, "FDS", "", "", "", "", msg); goto out; } Loading @@ -159,12 +167,26 @@ void lsof_dumpinfo(pid_t pid) { int fd; struct pid_info_t info; info.pid = pid; struct stat pidstat; struct passwd *pw; info.pid = pid; snprintf(info.path, sizeof(info.path), "/proc/%d/", pid); info.parent_length = strlen(info.path); // Get the UID by calling stat on the proc/pid directory. if (!stat(info.path, &pidstat)) { pw = getpwuid(pidstat.st_uid); if (pw) { strncpy(info.user, pw->pw_name, USER_DISPLAY_MAX - 1); info.user[USER_DISPLAY_MAX - 1] = '\0'; } else { snprintf(info.user, USER_DISPLAY_MAX, "%d", (int)pidstat.st_uid); } } else { strcpy(info.user, "???"); } // Read the command line information; each argument is terminated with NULL. strncat(info.path, "cmdline", sizeof(info.path)); fd = open(info.path, O_RDONLY); Loading Loading
toolbox/lsof.c +29 −7 Original line number Diff line number Diff line Loading @@ -37,11 +37,16 @@ #include <stdlib.h> #include <unistd.h> #include <pwd.h> #include <sys/stat.h> #define BUF_MAX 1024 #define CMD_DISPLAY_MAX 10 #define CMD_DISPLAY_MAX (9 + 1) #define USER_DISPLAY_MAX (10 + 1) struct pid_info_t { pid_t pid; char user[USER_DISPLAY_MAX]; char cmdline[CMD_DISPLAY_MAX]; Loading Loading @@ -82,7 +87,8 @@ void print_type(char *type, struct pid_info_t* info) if (!strcmp(link_dest, "/")) goto out; printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, "???", type, printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, info->user, type, "???", "???", "???", "???", link_dest); out: Loading Loading @@ -113,7 +119,8 @@ void print_maps(struct pid_info_t* info) if (inode == 0 || !strcmp(device, "00:00")) continue; printf("%-9s %5d %10s %4s %9s %18s %9zd %10ld %s\n", info->cmdline, info->pid, "???", "mem", printf("%-9s %5d %10s %4s %9s %18s %9zd %10ld %s\n", info->cmdline, info->pid, info->user, "mem", "???", device, offset, inode, file); } Loading @@ -136,7 +143,8 @@ void print_fds(struct pid_info_t* info) if (dir == NULL) { char msg[BUF_MAX]; snprintf(msg, sizeof(msg), "%s (opendir: %s)", info->path, strerror(errno)); printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, "???", "FDS", printf("%-9s %5d %10s %4s %9s %18s %9s %10s %s\n", info->cmdline, info->pid, info->user, "FDS", "", "", "", "", msg); goto out; } Loading @@ -159,12 +167,26 @@ void lsof_dumpinfo(pid_t pid) { int fd; struct pid_info_t info; info.pid = pid; struct stat pidstat; struct passwd *pw; info.pid = pid; snprintf(info.path, sizeof(info.path), "/proc/%d/", pid); info.parent_length = strlen(info.path); // Get the UID by calling stat on the proc/pid directory. if (!stat(info.path, &pidstat)) { pw = getpwuid(pidstat.st_uid); if (pw) { strncpy(info.user, pw->pw_name, USER_DISPLAY_MAX - 1); info.user[USER_DISPLAY_MAX - 1] = '\0'; } else { snprintf(info.user, USER_DISPLAY_MAX, "%d", (int)pidstat.st_uid); } } else { strcpy(info.user, "???"); } // Read the command line information; each argument is terminated with NULL. strncat(info.path, "cmdline", sizeof(info.path)); fd = open(info.path, O_RDONLY); Loading