por que o id de inode do dotdot não possui o ID de inode atualizado?

1

Eu tenho uma função que retorna do diretório filho para a raiz obtendo o idode do pai do ".." dentry da criança. O principal objetivo deste backtracking é identificar o nome do caminho relativo do caminho inserido pelo usuário.

Eu conheço a criança inode id para fazer o backtracking acima. mas eu tenho um problema quando eu faço isso, após a evacuação, o filho e os diretórios pai estão com diferentes inode não. então quando backtraced com "..", dotdot deu o inode id do anterior no e não o inode no após a evacuação.

porque o id do inode do dotdot não tem o ID de inode atualizado?

    
por Angus 24.09.2014 / 04:26

1 resposta

1

Não tenho reputação para fazer um comentário, por isso devo responder à sua pergunta mesmo que não consiga entender completamente o que você quer dizer com

the updated inode id

OK, para pegar o caminho do diretório raiz para um diretório onde você está, vamos na direção inversa. Você precisa primeiro obter o número de inode do diretório em que você está (você obtém a partir da entrada . ), depois acessar o diretório pai através da entrada .. e pesquisar no diretório pai procurando um diretório que tem o mesmo número de inode que você tem no começo. Esse é o nome dessa entrada de diretório no diretório pai. Dessa forma, você obterá como esse diretório . é chamado no diretório pai ... repetindo essa iteração, você obterá o nome do diretório granparent ... e assim por diante, até .... o que?

Ok, o diretório raiz tem uma entrada .. que aponta para si mesma (como . ) e você tem que comparar o número do inode que você obteve da última vez com o que obteve nesta iteração e parar se eles são o mesmo número inode. Uma vez que este diretório especial tenha sido alcançado, você tem uma lista de nomes que você deve inverter, colocar barras / entre eles e você terá o caminho para o diretório atual.

Se você não está no sistema de arquivos raiz, o kernel faz a mágica que você precisa para obter o diretório pai (ele segue a entrada .. pelos pontos de montagem, ignorando que a entrada .. aponta para si) e você ll obterá o caminho para o diretório raiz corretamente, então você pode seguir este methot até você obter . e .. apontando para o mesmo inode.

Espero que isso responda totalmente a você.

    
por 24.09.2014 / 22:11