REALPATH(3)

NOME
realpath - retorna o caminho absoluto canônico

SINÓPSE
#include <limits.h>
#include <stdlib.h>

char *realpath(const char *path, char *resolved_path);

DESCRIÇÃO
realpath expande todos as ligações simbólicas e resolve as referênccias para '/./', '/../' e extra caracteres '/' na seqüencia de terminação nula denominado por path e armazena o caminho absoluto canonizado no 'buffer' de tamanho PATH_MAX denomidado por resolved_path. O caminho resultante não terá ligação simbólica, '/./' ou '/../' componentes.

VALORES RETORNADOS
Se não houver erro, retorna um indicador para o resolved_path. De contrário retorna um indicador NULO, e o conteúdo da matriz resolved_path ficam indefinidos. A varíavel global errno é configurada para indicar o erro.

ERROS

EACCES
    Permissão de leitura ou pesquisa não foi permitida para o prefixo de um componente do caminho.

EINVAL
    Tanto path ou resolved_path são NULO. (Na libc5 isto apenas causaria uma 'falha de segmentação'.)

EIO Um erro de E/S ocorreu durante a leitura do sistema de arquivos.

ELOOP
    Muitas ligações simbólicas foram encontradas na tradução do nome do caminho.

ENAMETOOLONG
    Um componente do nome do caminho excedeu NAME_MAX caracteres, ou um nome de caminho inteiro excedeu PATH_MAX caracteres.

ENOENT
    O nome do arquivo não existe.

ENOTDIR
    Um componente do prefixo do caminho não é um diretório.

PROBLEMAS
A implementação da libc4 e libc5 contém um estouro de 'buffer' (consertado na libc-5.4.13). Portanto, programas suid como 'mount' precisam de uma versão particular.

O comprimento da saida do 'buffer' deveria ter um parâmetro adicional, particularmente desde que pathconf(3) alerta que o resultado de pathconf() pode ser enorme e não adequado para alocação de memória (mallocing memory).

HISTÓRICO
A função realpath apareceu primeiramente no BSD 4.4, contribuido por Jan-Simon Pendry. No Linux esta função aparece na libc 4.5.21.

DE ACORDO COM
No BSD 4.4 e Solaris o limite para o comprimento do nome do caminho é MAXPATHLEN (encontrado em <sys/param.h>). O SUSv2 prescreve PATH_MAX e NAME_MAX, como encontrado em <limits.h> ou provido pela função pathconf(). Uma fonte típica de fragmentos seria

    #ifdef PATH_MAX
      path_max = PATH_MAX;
    #else
      path_max = pathconf (path, _PC_PATH_MAX);
      if (path_max <= 0)
        path_max = 4096;
    #endif

As versões BSD 4.4, Linux e SUSv2 sempre retornam um nome de caminho absoluto. Solaris pode retornar um nome de caminho relativo quando o argumento path é relativo. O protótipo de realpath é dado em <unistd.h> na libc4 e libc5, mas, em <stdlib.h> em qualquer outro lugar.

VEJA TAMBÉM
readlink(2), getcwd(3), pathconf(3), sysconf(3).

TRADUZIDO POR LPD-BR em 27/06/2001.

  Tradução:
Ricardo C.O.Freitas <english.quest@best-service.com>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>