O Arquivador VINA

(contribuição do prof. Daniel Weingaertner)

O prof. Daniel Weingaertner

O objetivo deste trabalho é implementar o programa vina1), que consiste de um arquivador básico (archiver), isto é, um programa que salva em sequência uma coleção de arquivos (denominados membros) dentro de outro arquivo (denominado archive) cuja estrutura permite recuperar os arquivos originais individualmente.

Os programas tar, zip, rar e arj são arquivadores populares. Além de arquivar arquivos, a maioria deles também comprime os dados dos mesmos, para ocupar menos espaço de armazenamento. Para simplificar, o arquivador VINA não comprime os arquivos, apenas os armazena.

Execução do Programa

O pacote de software a ser construído deve gerar o executável chamado vina, que deve ser executado da seguinte forma:

vina <opção> <archive> [membro1 membro2 ...]

Onde a opção pode ser:

Exemplos de comandos:

// inclui os arquivos "arq.txt", "foto.jpg" e "despesas.ods" em backup.vr 
vina -i backup.vr arq.txt foto.jpg despesas.ods

// atualiza "despesas.ods" em backup.vr, se o arquivo externo for mais recente
vina -a backup.vr despesas.ods

// extrai o arquivo arq.txt de backup.vr
vina -x backup.vr arq.txt

// extrai todos os arquivos de backup.vr
vina -x backup.vr

// move o arquivo "arq.txt" para depois de "despesas.ods" em backup.vr
vina -m despesas.ods backup.vr arq.txt

Formato do Arquivo

Cada equipe é livre para inventar seu próprio formato para o archive, desde que respeitando as seguintes restrições:

Formato do arquivo vina

Uma abordagem interessante consiste em colocar a área de diretório no final do arquivo, mantendo no início do arquivo apenas um inteiro indicando a posição do arquivo onde inicia essa área. Essa organização torna mais simples as operações de alteração do conteúdo do arquivo.
As operações de leitura e escrita nos arquivos devem sempre ser feitas em formato binário, ou seja, usando as funções fread() e fwrite().

Se estiver usando as funções fprintf(), fscanf(), fputc(), fgetc() e similares, provavelmente está fazendo errado!

Erros

Em caso de erros, uma mensagem explicando o ocorrido deve ser impressa em stderr e a execução do programa deve ser encerrada com código de saída diferente de 0. Caso o programa possa recuperar-se automaticamente do erro, deve fazê-lo.

Produto a ser Entregue

Deve-se entregar um pacote de software completo contendo os fontes em linguagem C. O pacote deve ser arquivado e compactado com tar e gzip em um arquivo chamado login.tar.gz (substitua login por seu login/identificador na rede do departamento).

O pacote deve ter a seguinte estrutura de diretório e arquivos:

login/           diretório principal
     /src/...    diretório dos arquivos fonte (*.c, *.h)
     /doc/...    diretório da documentação Doxygen
     /LEIAME     arquivo
     Makefile    arquivo

Note que a extração dos arquivos de login.tar.gz deve criar o diretório login/ contendo todos os arquivos e diretórios acima. Os arquivos fonte também devem estar contidos no sub-diretório src.

O arquivo de texto LEIAME deve conter as seguintes informações:

O arquivo Makefile deve possuir as regras necessárias para compilar os módulos individualmente e gerar o programa executável. As seguintes regras devem estar presentes:

O diretório ./login/doc deve conter um arquivo de configuração para a documentação automática, que deve ser gerada a partir dos comentários no código fonte, utilizando o programa doxygen. A documentação (arquivos gerados pelo doxygen) também deve ficar neste diretório.

Avaliação

Os itens de avaliação do trabalho e respectivas pontuações são: