/***********************************************************************
* Code listing from "Advanced Linux Programming," by CodeSourcery LLC *
* Copyright (C) 2001 by New Riders Publishing *
* See COPYRIGHT for license information. *
***********************************************************************/
#include
#include
#include
int main (int argc, char* argv[])
{
char target_path[256];
char* link_path = argv[1];
/* Attempt to read the target of the symbolic link. */
int len = readlink (link_path, target_path, sizeof (target_path) - 1);
if (len == -1) {
/* The call failed. */
if (errno == EINVAL)
/* It's not a symbolic link; report that. */
fprintf (stderr, "%s is not a symbolic link\n", link_path);
else
/* Some other problem occurred; print the generic message. */
perror ("readlink");
return 1;
}
else {
/* NUL-terminate the target path. */
target_path[len] = '\0';
/* Print it. */
printf ("%s\n", target_path);
return 0;
}
}