### Function

# GLib file_read_link

since: 2.4

#### Declaration

    gchar*
    g_file_read_link (
      const gchar* filename,
      GError** error
    )

#### Description

Reads the contents of the symbolic link `filename` like the POSIX `readlink()` function.

The returned string is in the encoding used for filenames. Use `g_filename_to_utf8()` to convert it to UTF-8.

The returned string may also be a relative path. Use `g_build_filename()` to convert it to an absolute path:

    g_autoptr(GError) local_error = NULL;
    g_autofree gchar *link_target = g_file_read_link ("/etc/localtime", &local_error);

    if (local_error != NULL)
      g_error ("Error reading link: %s", local_error->message);

    if (!g_path_is_absolute (link_target))
      {
        g_autofree gchar *absolute_link_target = g_build_filename ("/etc", link_target, NULL);
        g_free (link_target);
        link_target = g_steal_pointer (&absolute_link_target);
      }

Available since: 2.4

#### Parameters

`filename`

  Type: `const gchar*`

  The symbolic link.

  The data is owned by the caller of the function.
  The value is a file system path, using the OS encoding.

`error`

  Type: `GError **`

  The return location for a recoverable error.

  The argument can be `NULL`.
  If the return location is not `NULL`, then you must initialize it to a `NULL` `GError*`.
  The argument will be left initialized to `NULL` by the function if there are no errors.
  In case of error, the argument will be set to a newly allocated `GError`; the caller will take ownership of the data, and be responsible for freeing it.

#### Return value

Type: `gchar*`

A newly-allocated string with the contents of the symbolic link, or `NULL` if an error occurred.

The caller of the function takes ownership of the data, and is responsible for freeing it.
The value is a file system path, using the OS encoding.