Getting absolute path of a file

absolute, c, filesystems, path, unix

Solution

Use realpath().

The `realpath()` function shall derive, from the pathname pointed to by `file_name`, an absolute pathname that names the same file, whose resolution does not involve '`.`', '`..`', or symbolic links. The generated pathname shall be stored as a null-terminated string, up to a maximum of `{PATH_MAX}` bytes, in the buffer pointed to by `resolved_name`.

If `resolved_name` is a null pointer, the behavior of `realpath()` is implementation-defined.

The following example generates an absolute pathname for the file identified by the symlinkpath argument. The generated pathname is stored in the actualpath array.

#include <stdlib.h>
...
char *symlinkpath = "/tmp/symlink/file";
char actualpath [PATH_MAX+1];
char *ptr;


ptr = realpath(symlinkpath, actualpath);

Problem

How can I convert a relative path to an absolute path in C on Unix? Is there a convenient system function for this? On Windows there is a `GetFullPathName` function that does the job, but I didn't find something similar on Unix...

Original source