Trabalhando com diretórios JFS

Os diretórios fornecem uma estrutura hierárquica para o sistema de arquivos, arquivos de link e nomes de subdiretórios do i-node. Não há limite para a profundidade de diretórios aninhados. O espaço em disco é alocado para diretórios em 4096-byte blocos, mas o sistema operacional aloca espaço de diretórios em 512-byte registros.

Os processos podem ler diretórios como arquivos regulares. No entanto, o kernel pode gravar diretórios. Por esta razão, os diretórios são criados e mantidos por um conjunto de subroutines exclusivas para eles.

Estruturas de diretórios JFS

Os diretórios contêm uma sequência de entradas de diretórios. Cada entrada de diretório contém três campos de comprimento fixo (o número do índice associado ao i-node do arquivo, o comprimento do nome do arquivo e o número de bytes para a entrada) e um campo de comprimento variável para o nome do arquivo. O campo nome do arquivo é nulo-finalizado e acolado a 4 bytes. Os nomes de arquivos podem ter até 255 bytes de comprimento.

As entradas de diretórios são de comprimento variável para permitir que nomes de arquivo a maior flexibilidade. No entanto, todo espaço de diretórios é alocado em todos os momentos.

Nenhuma entrada de diretório pode abranger 512-byte seções de um diretório. Quando um diretório requer mais de 512 bytes, outro registro de 512-byte é anexado ao registro original. Se todos os 512-byte registros no bloco de dados alocados forem preenchidos, um bloco de dados adicional (4096 bytes) será colocado em allotérado.

Quando um arquivo é removido, o espaço que o arquivo ocupado na estrutura de diretórios é adicionado à entrada de diretório precedente. As informações sobre o diretório removido permanecem até que uma nova entrada se encaixe no espaço vacinado.

Todo diretório contém as entradas. (ponto) e .. (ponto, ponto). O. (dot) pontos de entrada de diretórios para o i-node para o próprio diretório. O .. (dot, dot) entrada de diretório pontos para o i-node para o diretório pai. O programa mkfs inicializa um sistema de arquivos para que o. (ponto) e .. (dot, dot) entradas no novo diretório raiz apontam para o i-nó raiz do sistema de arquivos.

Os diretórios possuem os seguintes modos de acesso:

Modo Descrição
ler Permite um processo para ler entradas de diretórios
gravar Permite um processo para criar novas entradas de diretórios ou remover antigos usando o creat, mknod, link, e unlink subroutines
execução Permite que um processo utilize o diretório como um diretório de trabalho atual ou para pesquisar abaixo do diretório na árvore de arquivos

Trabalhando com diretórios JFS (programação)

A seguir está uma lista de subroutines disponíveis para trabalhar com diretórios:
fechar
Fecha um fluxo de diretório e libera a estrutura associada ao parâmetro DirectoryPointer
mkdir
Cria diretórios
abrir
Abre o diretório designado pelo parâmetro DirectoryName e associa um fluxo de diretório a ele
readdir
Retorna um ponteiro para a próxima entrada de diretório
rewinddir
Reconfigura a posição do fluxo de diretório especificado para o início do diretório
rmdir
Remove diretórios
seekdir
Configura a posição da próxima operação subroutine readdir no fluxo de diretório
telldir
Retorna o local atual associado ao fluxo de diretório especificado

Alterando o diretório atual de um processo

Quando o sistema é bootado, o primeiro processo usa o diretório raiz do sistema de arquivos raiz como seu diretório atual. Novos processos criados com a subroutine fork herdam o diretório atual utilizado pelo processo pai. A subroutine chdir altera o diretório atual de um processo.

A subroutine chdir analisa o nome do caminho para garantir que o arquivo de destino seja um diretório e que o proprietário do processo tenha permissões para o diretório. Após a subroutine chdir ser executada, o processo usa o novo diretório atual para pesquisar todos os nomes de caminhos que não começam com um / (slash).

Alterando o diretório raiz de um processo

Você pode fazer com que o diretório nomeado por um parâmetro Caminho do processo se torne o diretório raiz efetivo usando o subroutine chroot . Os processos filhos do processo de chamada consideram o diretório indicado pela subroutine chroot como o diretório raiz lógico do sistema de arquivos.

Os processos usam o diretório raiz do sistema de arquivos global para todos os nomes de caminho começando com um / (slash). Todas as pesquisas de nome do caminho começando com um / (slash) começam neste novo diretório raiz.

Subroutines que controlam diretórios JFS

Devido à natureza única dos arquivos de diretórios, os diretórios são controlados por um conjunto especial de subroutines. As subroutines a seguir são projetadas para controlar diretórios:

chdir
Altera o diretório de trabalho atual
raiz raiz
Altera o diretório raiz efetivo
getcwd ou getwd
Obtém caminho para o diretório atual
mkdir
Cria um diretório
opendir, readdir, telldir, seekdir, rewinddir, ou closedir
Executar várias ações em diretórios
renomear
Renomeia um diretório
rmdir
Remove um diretório