Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
07/10/1991

< FILES >


Se você procurar o comando "files" no manual do DOS vai encontrar uma pérola de concisão. Em pouco mais de uma dúzia de linhas está dito que ele serve para determinar o número máximo de arquivos que podem ser abertos ao mesmo tempo. Que esse número pode variar entre 8 a 255. E que 8 é o default. E c'est fini.

Entendeu? Sabe o que é abrir um arquivo? Para que? Quantos você deve permitir que sejam abertos? Se não, nem se preocupe: acho que isto é uma das coisas aparentemente mais confusas do já bastante confuso DOS. E o manual não ajuda muito. Pois vamos esclarecer.

Atente para o "aparentemente" aí de cima. Ele foi ali inserido porquê na verdade a coisa toda é muito simples. A confusão nasce apenas da forma nebulosa como o assunto é abordado pelo manual. Parece que seus autores acreditam que o usuário médio do DOS é uma toupeira que não consegue entender nada que seja ligado ao funcionamento interno da máquina. Mas como são obrigados a fornecer alguma explicação, dão a mais sucinta possível, tipo "seu irmãozinho nasceu porquê papai plantou uma sementinha na mamãe". E logo mudam de assunto antes que se pergunte como. Já que considero meus leitores a parcela mais esclarecida da humanidade (baseado justamente no fato de que são meus leitores), vou descer aos detalhes necessários para que o processo fique absolutamente claro. Me refiro ao dos arquivos, evidentemente. O da sementinha presumo que vocês já saibam. E os detalhes dificilmente caberiam aqui.

Então vamos lá. Um arquivo nada mais é que um conjunto de bytes gravados em disco. Se forem códigos que a máquina entende como instruções, é um arquivo executável, ou de programa. Se não, provavelmente é um arquivo de dados usado por algum programa, como um editor de textos, banco de dados ou planilha. Mas seja lá o que for, ao gravar arquivos no disco o DOS sempre anota certas informações no diretório e em uma tabela que mantém no próprio disco, a FAT (File Allocation Table, ou Tabela de Alocação de Arquivos). No diretório, o nome e extensão do arquivo, seu tamanho, data e hora em que foi gravado e tipo do arquivo, assim como a localização do primeiro setor do arquivo. E como em cada setor cabem apenas 512 bytes e muitos arquivos se estendem por diversos setores, anota na FAT todos os demais setores que o arquivo ocupa. Tudo isto para poder encontrá-lo mais tarde, quando dele precisar.

E para que se precisa de um arquivo? Se nele está gravado um programa, para executá-lo. E nesse caso não há complicações: é carregado na memória e executado. Mas se for um daqueles outros arquivos, conterá dados. E em geral um arquivo de dados é usado por um programa para ser consultado ou alterado.

Lembra-se dos buffers? Pois é: quando o DOS lê algo de um disco, não o faz byte a byte: copia um ou mais setores para áreas da memória chamadas buffers. E para gravar, a mesma coisa: escreve os dados no buffer e mais tarde grava o setor inteiro no disco. Portanto, quando o programa solicita uma leitura ou escrita em um arquivo, elas se fazem no buffer e não no disco. Repare que tudo isto é feito pelo DOS e não pelo programa, para o qual tudo se passa como se estivesse lendo ou gravando no disco. Em outras palavras: o programa ordena ao DOS que leia, digamos, o centésimo byte de um arquivo em disco. O DOS, em vez de buscar só este byte, lê todo o setor onde ele está para um buffer, pega o byte e o passa para o programa. Este, por sua vez, "pensa" que o recebeu diretamente do disco e vai em frente. Se pedir o centésimo primeiro byte, o DOS, que não é bobo, o lê do buffer, que é mais fácil. O programa nem percebe e segue adiante como se tivesse recebido do disco. Mais tarde, quando o programa saciar sua sede de dados, o DOS pega tudo o que está nos buffers, grava de volta no arquivo e atualiza diretório e FAT do disco.

O fato importante nisto tudo é que quando um programa pede para ler ou gravar algo em um arquivo isto é feito na memória e não no disco. É aí que entra o conceito de "abrir" e "fechar" arquivos. Antes de usar um arquivo o programa deve avisar ao DOS que vai fazê-lo. O DOS localiza o arquivo em disco, passa ao programa uma espécie de senha, chamada "handler" (ou "manipulador"), e "abre" o arquivo, ou seja, copia as partes que o programa deseja consultar ou modificar para os buffers e os põe à disposição do programa. Mais tarde o programa avisa ao DOS que terminou a tarefa, e então - e somente então - o DOS "fecha" o arquivo, ou seja, grava no disco o conteúdo modificado dos buffers e atualiza as entradas do diretório e da FAT. Note que quando um programa termina sua execução, caso o programador tenha se esquecido de fechar os arquivos, o DOS bondosamente o faz. Senão FAT e diretório ficariam desatualizados e o arquivo truncado. Mas se faltar energia ou for dado um boot durante a execução de um programa enquanto arquivos estiverem abertos, prepare-se para um monte de mensagens da próxima vez que rodar o Chkdsk. E chorar seus dados perdidos.

Alguns programas podem usar mais de um arquivo ao mesmo tempo. Se você pedir a um banco de dados para exibir o nome de todos os seus amigos com menos de 30 anos que têm uma Ferrari, apreciam Brahms e são fluentes em hindustão o programa pode precisar de cruzar dados de quatro arquivos diferentes - além de ficar vivamente impressionado com seu círculo da amizades. E como ele estará buscando dados nesses arquivos ao mesmo tempo, todos eles devem estar abertos.

Daí a necessidade do comando "files": o DOS precisa saber que arquivos estão abertos e quem os está usando. E para isto reserva algum espaço na memória. Para cada handle, 64 bytes. Não é muito, mas todos os 255 permitidos ocupariam 16K. O que seria um desperdício: seja qual for o valor total, cada programa pode abrir no máximo 20 arquivos concomitantemente.

Você pode informar o DOS quantos arquivos permitirá que sejam abertos ao mesmo tempo com o comando "files", que fica obrigatoriamente no Config.Sys. Sua sintaxe é de uma simplicidade franciscana: o nome do comando, um sinal de igual e o número de arquivos. Se desejar, por exemplo, que o sistema permita abrir 20 arquivos ao mesmo tempo, inclua no Config.Sys a linha:

files=20

Se você usa freqüentemente programas que abrem muitos arquivos concomitantemente, como compiladores ou bancos de dados, mantenha este número entre 20 e 40. Mais é desperdício. Menos, é economia pouca. E até a próxima semana, quando vamos falar do ambiente...

B. Piropo