User Tools

Site Tools


prog2:arquivador_vina

O Arquivador VINA

O prof. Daniel Weingaertner

(contribuição do 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) em um outro arquivo (denominado archive) cuja estrutura permite recuperar os arquivos originais individualmente.

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:

  • -i : insere/acrescenta um ou mais membros ao archive. Caso o membro já exista no archive, ele deve ser substituído. Novos membros são inseridos respeitando a ordem da linha de comando, ao final do archive;
  • -a : mesmo comportamento da opção -i, mas a substituição de um membro existente ocorre APENAS caso o parâmetro seja mais recente que o arquivado;
  • -m target : move o membro indicado na linha de comando para depois do membro target existente em archive. A movimentação deve ocorrer na seção de dados do archive;
  • -x : extrai os membros indicados de archive. Se os membros não forem indicados, todos devem ser extraídos. A extração consiste em ler o membro de archive e criar um arquivo correspondente, com conteúdo idêntico, em disco;
  • -r : remove os membros indicados de archive;
  • -c : lista o conteúdo de archive em ordem, incluindo as propriedades de cada membro (nome, UID, permissões, tamanho e data de modificação) e sua ordem no arquivo.

Formato do Arquivo

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

  • O início ou final do archive deve ter um cabeçalho, após/antes (d)o qual os membros são armazenados, conforme ilustrado na figura abaixo.Formato do arquivo vina
  • Todas as informações sobre os membros, necessárias para a manipulação do archive, devem estar armazenadas única e exclusivamente no cabeçalho. A parte restante deve conter apenas os dados dos membros;
  • Para cada membro, devem ser armazenadas as seguintes informações: nome (sem espaços), UID, permissões, tamanho, data de modificação e sua ordem no arquivo;
  • A ordem de um membro é dada pela ordem de inserção, e pode ser alterada pela opção -m.
  • O conteúdo do cabeçalho pode ser manipulado em memória RAM, ou em disco, a critério da equipe.
  • O conteúdo dos membros do archive deve ser manipulado diretamente em disco, não sendo permitida a alocação de mais de 1.024 bytes de memória para manipulação dos conteúdos dos membros;

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 (1) e gzip (1) em um arquivo chamado login.tar.gz ou login1-login2.tar.gz (grupo com 2 membros).

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

  • ./login/: diretório principal;
  • ./login/src: diretório contendo os arquivos fonte (*.c, *.h)
  • ./login/doc;
  • ./login/LEIAME;
  • ./login/Makefile;

Note que a extração dos arquivos de login.tar.gz deve criar o diretório login1/ 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:

  • autoria do software (nome e RA do(s) autor(es));
  • lista dos arquivos e diretórios contidos no pacote e sua descrição (breve);
  • uma seção descrevendo os algoritmos e as estruturas de dados utilizadas, as alternativas de implementação consideradas e/ou experimentadas e os motivos que o levaram a optar pela versão entregue, as dificuldades encontradas e as maneiras pelas quais foram contornadas.
  • bugs conhecidos;

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:

  • all: compila e produz um executável chamado vina no diretório login/;
  • clean: remove todos os arquivos temporários e os arquivos gerados pelo Makefile (*.o, executável, etc.).
  • doc: gera a documentação em HTML utilizando o programa doxygen;

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 (1). 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:

  • Qualidade da documentação: arquivo LEIAME e documentação HTML gerada pelo Doxygen (15 pontos)
  • Funcionamento: corretude das respostas nos testes executados (55 pontos)
  • Eficiência: algoritmos e estruturas de dados utilizados para obter um melhor desempenho, desde que devidamente justificados no arquivo LEIAME (30 pontos)
prog2/arquivador_vina.txt · Last modified: 2019/04/09 13:24 (external edit)