Ho开发者_开发问答w to get the absolute path for a given relative path programmatically in Linux?
Incase of Windows we have the _fullpath()
API. In other words, I mean what is analogous API to _fullpath
of Windows in Linux?
As Paul mentioned, use realpath()
. Please note though, that since many file systems in Linux support hard links, any given directory can have a number of different absolute paths.
Check out the realpath function.
#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;
}
Try realpath:
$ man realpath
This is also available in BSD, OS X, et al.
There is the realpath
from stdlib.h
Running on RedHat 5.3, realpath doesn't exist but readlink is installed. You can use it on relative paths and symlinks, plus it will resolve symlinks recursively for you. It's thus a better option that realpath in my opinion
readlink -f .
The is also another useful way, like "readlink -m $filename"
First of all, it works without requirement for target file to exist. Secondly, it will handle symlinks and get really real path.
// 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();
}
精彩评论