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 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);