Não, não há chamada do sistema Unix para abrir um diretório ou arquivo por inode, em vez de por nome. O conceito de posição de uma entrada de diretório na lista de entradas de diretório também não existe.
Se você acha que quer isso, provavelmente tomou um rumo errado em algum lugar no início de seu processo de design.
Se houvesse dois diretórios chamados a
, qual deles seria a/file
?
As entradas de diretório são um mapa não ordenado de nomes para inodes , com nomes como as chaves. Chaves duplicadas não são suportadas e não há como criá-las. Qualquer tentativa de fazer qualquer coisa com um nome que já exista apenas referenciará a entrada de diretório existente.
Editar manualmente as estruturas de dados em disco (ou um bug do kernel ou erro de hardware) poderia produzir um diretório com o mesmo nome duas vezes (talvez até apontando para inodes diferentes), mas esse é um problema que fsck
verificaria !
Digamos que você execute cat /home/peter/foo.txt
. cat não lê o diretório, apenas open("/home/peter/foo.txt", O_RDONLY) = -1 ENOENT (No such file or directory)
. ( strace cat foo.txt
para ver.)
Pode ser possível usar FUSE para apresentar um "sistema de arquivos" que interpretou caracteres especiais em nomes de arquivos de alguma maneira estranha e retornou entradas de diretório em um pedido que tinha algum significado. Se você está certo em colocar limites para quais caracteres podem aparecer em um nome de arquivo, você pode dar um significado especial a alguns caracteres. Portanto, /mnt/database-fuse-mount/some_dir/{2}
pode se referir à segunda entrada de diretório. Ou .../name{2}
pode se referir à segunda entrada chamada name
. Eu não espero que alguém já tenha implementado isso, a menos que haja um módulo FUSE para montar tabelas de banco de dados como diretórios com um arquivo para cada registro. Com o nome do arquivo como chave primária? IDK, realmente não faz sentido, porque um banco de dados SQL pode ser consultado por qualquer um dos seus campos.