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...
Use realpath().
The
realpath()
function shall derive, from the pathname pointed to byfile_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 byresolved_name
.If
resolved_name
is a null pointer, the behavior ofrealpath()
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);