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