Add pwdx(1) - ubase - suckless linux base utils | |
git clone git://git.suckless.org/ubase | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f26a1449bfa18a6fbbe263f084df4e490772e9d3 | |
parent 28795cffe22ee6a645e4763f6b9bd0e422dddb2a | |
Author: Mattias Andrée <[email protected]> | |
Date: Sat, 26 Mar 2016 12:58:37 +0100 | |
Add pwdx(1) | |
Signed-off-by: Mattias Andrée <[email protected]> | |
Diffstat: | |
M Makefile | 2 ++ | |
M TODO | 1 - | |
A pwdx.1 | 13 +++++++++++++ | |
A pwdx.c | 51 +++++++++++++++++++++++++++++… | |
4 files changed, 66 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -70,6 +70,7 @@ BIN = \ | |
pidof \ | |
pivot_root \ | |
ps \ | |
+ pwdx \ | |
readahead \ | |
respawn \ | |
rmmod \ | |
@@ -106,6 +107,7 @@ MAN1 = \ | |
passwd.1 \ | |
pidof.1 \ | |
ps.1 \ | |
+ pwdx.1 \ | |
respawn.1 \ | |
stat.1 \ | |
su.1 \ | |
diff --git a/TODO b/TODO | |
@@ -19,7 +19,6 @@ mkswap [-L] | |
partprobe | |
pmap | |
ps (support for more options) | |
-pwdx | |
rfkill | |
rmgroup | |
rmuser | |
diff --git a/pwdx.1 b/pwdx.1 | |
@@ -0,0 +1,13 @@ | |
+.Dd March 26, 2015 | |
+.Dt PWDX 1 | |
+.Os ubase | |
+.Sh NAME | |
+.Nm pwdx | |
+.Nd print working directory of other processes | |
+.Sh SYNOPSIS | |
+.Nm | |
+.Ar pid... | |
+.Sh DESCRIPTION | |
+.Nm | |
+Prints the current working directory for each | |
+.Ar pid . | |
diff --git a/pwdx.c b/pwdx.c | |
@@ -0,0 +1,51 @@ | |
+/* See LICENSE file for copyright and license details. */ | |
+#include <errno.h> | |
+#include <limits.h> | |
+#include <stdio.h> | |
+#include <string.h> | |
+#include <unistd.h> | |
+ | |
+#include "util.h" | |
+ | |
+static void | |
+usage(void) | |
+{ | |
+ eprintf("usage: %s pid...\n", argv0); | |
+} | |
+ | |
+int | |
+main(int argc, char *argv[]) | |
+{ | |
+ int ret = 0; | |
+ char path[PATH_MAX]; | |
+ char target[PATH_MAX + sizeof(" (deleted)")]; | |
+ ssize_t n; | |
+ | |
+ ARGBEGIN { | |
+ default: | |
+ usage(); | |
+ } ARGEND; | |
+ | |
+ if (argc == 0) | |
+ usage(); | |
+ | |
+ for (; argc > 0; argc--, argv++) { | |
+ n = snprintf(path, sizeof(path), "/proc/%s/cwd", *argv); | |
+ if (n < 0 || n > sizeof(path)) { | |
+ errno = ESRCH; | |
+ } else { | |
+ n = readlink(path, target, sizeof(target) - 1); | |
+ if (n >= 0) { | |
+ target[n] = '\0'; | |
+ printf("%s: %s\n", *argv, target); | |
+ continue; | |
+ } | |
+ } | |
+ if (errno == ENOENT) | |
+ errno = ESRCH; | |
+ weprintf("%s:", *argv); | |
+ ret = 1; | |
+ } | |
+ | |
+ return ret; | |
+} |