Wie man den absoluten Pfad zu einem gegebenen relativen Pfad programmgesteuert in Linux?
Wie man den absoluten Pfad zu einem gegebenen relativen Pfad programmgesteuert in Linux?
Incase von Windows haben wir die _fullpath()
API. In anderen Worten, ich meine, was ist Analog-API _fullpath
von Windows in Linux?
Da war getaggt mit
c
wird, ist wahrscheinlich ein Duplikat von stackoverflow.com/questions/229012/...InformationsquelleAutor Jay | 2010-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Paulus erwähnt, verwenden
realpath()
. Bitte beachten Sie aber, dass da viele Dateisysteme in Linux-Unterstützung Hardlinks jedem Verzeichnis kann eine Reihe von verschiedenen absoluten Pfade.Danke für die Info. Wenn aufgrund harter links, wenn ein bestimmtes Verzeichnis behebt mehrere verschiedene absolute Pfade, was das Verhalten von realpath-API?
Hardlinks auf Verzeichnisse sind als böse und verboten, die von den meisten Dateisysteme.
realpath löst symbolische links
Ich bin ein wenig verwirrt. Ist es möglich, dass ein bestimmtes Verzeichnis löst viele verschiedene absolute Pfade? Wenn ja, was wird dann sein, das Verhalten realpath?
InformationsquelleAutor unwind
Check-out die realpath Funktion.
Dieser code ist unsicher und fehlerhaft, wie oben dargelegt. Jedoch nicht geben einem so kleinen Puffer zu
realpath
welche höchst wahrscheinlich zu schreiben über den Puffer-Größe (da es erfordert mit einer Länge von PATH_MAX). Auch wenn das Programm nicht abstürzt, dieser code kann zu einem Sicherheitsrisiko führen, je nach variable layout, wenn ein Gegner kontrollieren kann, den ursprünglichen Pfad, gelöst werden. Das Handbuch empfiehlt, die übergabe von NULL als zweiten parameter, und lassenrealpath
Speicher, um sicherzustellen, dass keine Probleme mit PATH_MAX Definitionen, beginnend mit POSIX 2008.Ich denke, es ist eine gute, denke immer daran denken, dass PATH_MAX einfach nicht: insanecoding.blogspot.com.br/2007/11/pathmax-simply-isnt.html
InformationsquelleAutor Martin Wickman
Versuchen realpath:
Dies ist auch in BSD, OS X, et al.
InformationsquelleAutor Paul R
Gibt es die
realpath
vonstdlib.h
realpath
ist instdlib.h
. Sicher, dass nicht werden wahr, wenn man bedenkt, dassrealpath
ist nicht Teil der C-Bibliothek. Und siehe da, es stimmt. Ich bin sprachlos. Was ist ein wohlgeformtes Programm definiert eine eigene Funktion namensrealpath
zu tun? Diese POSIX-Jungs haben amok laufen! Amok sage ich!Dan: So lange, wie Sie die Einbindung der compiler in "strictly conforming" - Modus und nicht definieren, Makros, aufrufen Undefiniertes Verhalten (wie
_XOPEN_SOURCE
), Sie sollten OK sein.InformationsquelleAutor Otto Allmendinger
Läuft auf RedHat 5.3, realpath nicht vorhanden, aber readlink installiert ist. Sie können es verwenden, auf relative Pfade und symlinks, plus es löst symlinks (rekursiv für Sie. Damit ist eine bessere option, die realpath meiner Meinung nach
InformationsquelleAutor Lionel
Das ist auch ein weiterer nützlicher Weg, wie "readlink -m $mit dem Namen"
Erste von allen, es funktioniert ohne Anforderung für Ziel-Datei vorhanden sind.
Zweitens, es handle symlinks und erhalten Sie wirklich echten Pfad.
InformationsquelleAutor Zebooka
Und es ist auch nicht C.
InformationsquelleAutor Bill Moore