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)
- 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