Linux hat ein /proc
Verzeichnis und ein Dateisystem, die, soweit ich das beurteilen kann, nicht Teil von POSIX sind. In jedem /proc/$PID
Unterverzeichnis befindet sich ein symbolischer Link, cwd
der auf das tatsächliche Arbeitsverzeichnis des Prozesses dieser PID verweist (der cwd
Link ist immer aktuell).
Diese symbolische Verknüpfung ist für einige Anwendungsfälle praktisch, z. B. das Arbeiten mit unterschiedlichen Shells und das Austauschen von Dateien zwischen den beiden Shells (formal deren Arbeitsverzeichnisse).
Gibt es eine einfache Möglichkeit, etwas Ähnliches zu erhalten, nur mit der POSIX-Funktion?
Mehr zur Frage
Nach einem Kommentar, mehr Präzision: Es muss nicht unbedingt ein Link und eine Umgebungsvariable sein $<PID>_CWD
, wäre auch so gut, obwohl ich auf den ersten Blick nicht glaube, dass es eine solche Lösung gibt. Es muss nur leicht zu referenzieren sein (z. B. symbolischer Link oder Umgebungsvariable) und jedes Mal auf dem neuesten Stand sein, wenn der andere Prozess das Arbeitsverzeichnis wechselt.
Die Lösung muss nicht unbedingt POSIX sein, und der wichtigste Aspekt ist die Portabilität, aber POSIX ist sicherlich eine Garantie.
pwdx
Befehl. Sie können also einfach einen Alias oder eine Funktion erstellen, die pwdx
unter Linux aufgerufen wird und sich umgibt, readlink
wenn Sie nach etwas Tragbarem suchen.
pwdx
Befehl, der mitgeliefert wird , procps
sodass dies möglicherweise Ihre Antwort ist.
pwdx
. Aber FreeBSD nicht.
getcwd(3)
verwendet, indem Sie stat(".")
und anrufen readdir("..")
, eine passende Inode-Nummer finden und den Vorgang nach oben wiederholen, bis er das Stammverzeichnis erreicht. Viel Glück dabei , dass im Rahmen eines anderen Verfahrens. (Ich nehme an, man könnte verwenden ptrace
, um einen Anruf an getcwd
...)