Comment obtenir le chemin absolu pour un chemin relatif donné par programmation sous Linux?
-
22-09-2019 - |
Question
Comment obtenir le chemin absolu pour un chemin relatif donné par programmation sous Linux?
Encas de Windows, nous avons l'API _fullpath()
. En d'autres termes, je veux dire ce qui est analogue à l'API _fullpath
de Windows sous Linux?
La solution
Comme mentionné Paul, utilisez realpath()
. S'il vous plaît noter cependant, que de nombreux systèmes de depuis fichiers dans le support Linux liens durs , un répertoire donné peut avoir une nombre de différents chemins absolus.
Autres conseils
Consultez la realpath fonction.
#include <stdlib.h>
#include <stdio.h>
#include <linux/limits.h>
int main()
{
char resolved_path[PATH_MAX];
realpath("../../", resolved_path);
printf("\n%s\n",resolved_path);
return 0;
}
Il est realpath
de stdlib.h
sur Redhat 5.3, ne realpath existe pas, mais readlink est installé. Vous pouvez l'utiliser sur des chemins relatifs et les liens symboliques, plus il va résoudre les liens symboliques récursive pour vous. Il est donc une meilleure option que realpath à mon avis
readlink -f .
est aussi une autre façon utile, comme "readlink -m $ filename"
D'abord, il fonctionne sans exigence pour le fichier cible existe. En second lieu, il traitera des liens symboliques et obtenir le chemin vraiment réel.
// For C++ with Gnome Gtkmm3 libraries
#include <glibmm.h>
#include <giomm.h>
string PathRel2Abs(string relpath) {
Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(relpath);
return file->get_path();
}