Caminhos absolutos / canônicos / relativos

2

Qual é a diferença entre caminhos absolutos / canônicos / relativos?

Eu acho que absoluto começa com / . Pode conter /../ ?

Um caminho canônico é diferente de um caminho absoluto, pois não pode conter /../ ?

foo é um caminho relativo?

pesquisando posix canonical path não mostrou muito ... Quais são as referências POSIX para esses termos?

    
por Tom Hale 16.10.2017 / 15:18

1 resposta

6

define “caminho absoluto” da seguinte forma:

A pathname beginning with a single or more than two <slash> characters

e "caminho relativo" da seguinte forma:

A pathname not beginning with a <slash> character.

Isso é tudo para caminhos relativos e absolutos.

Caminhos canônicos não são definidos em POSIX, mas o termo geralmente se refere a caminhos comparáveis, ie se você pegar dois caminhos para um objeto de sistema de arquivos e convertê-los em forma canônica, o resultado deve ser idêntico se e somente se os dois objetos do sistema de arquivos forem idênticos. Isso envolve remover “..” como você menciona, mas também significa resolver links simbólicos; então um caminho canônico poderia ser definido como

A pathname whose components are all real directories or files, excluding “.” and “..”, and whose slashes are not repeated

Em termos POSIX, um nome de caminho canônico é efetivamente um nome de caminho resolvido (desde que como você aceita que nomes de caminho canônicos só podem ser determinados para objetos do sistema de arquivos que existem).

Observe que isso só funciona porque os diretórios com hard-link não são permitidos ...

Então, responda suas perguntas:

  • um caminho absoluto pode conter /../ ;
  • um caminho canônico não pode conter /../ , nem pode conter /./ , // (exceto indiscutivelmente na primeira posição) ou links simbólicos;
  • foo é um caminho relativo.

(Pedantemente, eles são todos caminhos nomes , não apenas caminhos.)

    
por 16.10.2017 / 15:40