Modos de trabalhar com arquivos
Método FCB
Métodos de canais de comunicação
Dicionário de Computação (em inglês)
Há dois modos de trabalhar com arquivos. O primeiro é através de FCB ( blocos de controle de arquivo), o segundo é através de canais de comunicação, também conhecidos como handles.
O primeiro modo de manusear arquivos tem sido usado desde o sistema operacional CPM, predecessor do DOS, logo permite certas compatibilidades com muitos arquivos velhos do CPM bem como com a versão 1.0 do DOS, além deste método permitir-nos ter um número ilimitado de arquivos abertos ao mesmo tempo. Se você quiser criar um volume para o disco, a única forma é através deste método.
Depois de considerarmos as vantagens de FCB, o uso do método de Canais de Comunicação é muito simples e permite-nos um melhor manuseio de erros.
Para uma melhor facilidade, daqui por diante nos referiremos aos Blocos de Controle de Arquivo como FCBs e aos Canais de Comunicação como handles.
Há dois tipos de FCB, o normal, cujo comprimento é 37 bytes, e o extendido, com 44 bytes. Neste tutorial iremos assumir o primeiro, ou seja, quando falarmos em FCB, estaremos fazendo referência ao tipo normal (37 bytes).
O FCB é composto de informações dadas pelo programador e por informações que ele toma diretamente do sistema operacional. Quando estes tipos de arquivos são usados, só é possível se trabalhar no diretório corrente, pois FCBs não fornecem suporte ao sistema de organização de arquivos através de diretórios do DOS.
FCB é composto pelos seguintes campos:
POSIÇÃO COMPRIMENTO SIGNIFICADO 00H 1 Byte Drive 01H 8 Bytes Nome do arquivo 09H 3 Bytes Extensão 0CH 2 Bytes Número do bloco 0EH 2 Bytes Tamanho do registro 10H 4 Bytes Tamanho do arquivo 14H 2 Bytes Data de criação 16H 2 Bytes Hora de criação 18H 8 Bytes Reservado 20H 1 Bytes Registro corrente 21H 4 Bytes Registro randômico
Para selecionar o drive de trabalho, assuma: drive A = 1; drive B = 2; etc. Se for usado 0, o drive que está sendo usado no momento será tomado como opção.
O nome do arquivo deve ser justificado à esquerda e é necessário preencher com espaços os bytes remanescentes, a extensão é colocada do mesmo modo.
O bloco corrente e o registro corrente dizem ao computador que registro será acessado nas operações de leitura e escrita. Um bloco é um grupo de 128 registros. O primeiro bloco de arquivo é o bloco 0. O primeiro registro é o registro 0, logo o último registro do primeiro bloco deve ser o 127, uma vez que a numeração é iniciada com 0 e o bloco pode conter 128 registradores no total.
Para abrir um arquivo FCB é usada a função 0FH da interrupção 21h. A unidade, o nome e a extensão do arquivo devem ser inicializadas antes da abertura.
O registrador DX deve apontar para o bloco. Se o valor FFH é retornado no registrador AH quando da chamada da interrupção, então o arquivo não foi encontrado. Se tudo der certo, o valor 0 é retornado.
Se o arquivo é aberto, então o DOS inicializa o bloco corrente em 0, o tamanho do registro para 128 bytes. O tamanho do arquivo e a sua data são preenchidos com as informações encontradas no diretório.
Para a criação de arquivos é usada a função 16H da interrupção 21h.
O registrador DX deve apontar para uma estrutura de controle cujo os requisitos são de que pelo menos a unidade lógica, o nome e a extensão do arquivo sejam definidas.
Caso ocorra problema, o valor FFH deve retornar em AL, de outra forma este registrador conterá o valor 0.
Antes de conseguirmos realizar escrita para o disco, é necessário definir a área de transferência de dados usando, para tanto, a função 1AH da interrupção 21h.
A função 1AH não retorna qualquer estado do disco nem da operação. Mas a função 15H, que usaremos para escrever para o disco, faz isso no registrador AL. Se este for igual a zero, então não há erro e os campos de registro corrente e de bloco são atualizados.
Antes de tudo, devemos definir a área de transferência de arquivo ou DTA. Para a leitura seqüencial usaremos a função 14H da interrupção 21h.
O registro a ser lido é definido pelos campos registro e bloco corrente. O registrador AL retorna o estado da operação. Se AL contém o valor 1 ou 3, significa que foi atingido o fim do arquivo. Um valor 2, por sua vez, significa que o FCB está estruturado erroneamente.
Caso não ocorra erro, AL conterá o valor 0 e os campos de registro e bloco corrente são atualizados.
A função 21H e a função 22H da insterrupção 21h são usadas à realização, respectivamente, da escrita e leitura randômica.
O número de registro randômico e o bloco corrente são usados para calcular a posição relativa do registro a ser lido ou escrito.
O registrador AL retorna a mesma informação do que par a escrita e leitura seqüencial. A informação a ser lida será retornada na área de transferência do disco, bem como a informação a ser escrita retorna na DTA.
Para fechar um arquivo usamos a função 10H da interrupção 21h.
Se após invocar esta função, o regisatrador AL conter o valor FFH, significa que o arquivo foi mudado de posição, o disco foi mudado ou há erro de acesso a disco.
O uso de handles para gerenciar arquivos traz grandes facilidades na criação de arquivos e o programador pode concentrar-se em outros aspectos da programação sem preocupar-se com detalhes que podem ser manuseados pelo sistema operacional.
A facilidade dos handles consiste em que para operarmos sobre um arquivo é apenas necessário definirmos o nome do mesmo e o número de handle a usar, todo o resto da informação é manuseada internamente pelo DOS.
Quando usamos este método para trabalhar com arquivos, não há distinção entre acesso seqüencial ou randômico, o arquivo é simplesmente tomado como uma rede de bytes.
As funções usadas para o manuseio de arquivos atravé de handles são descritas na unit 6: Interrupções, na seção dedicada à interrupção 21h.
![]() Powered by WebGlimpse |
|