pmicrotar – biblioteca para arquivos *.tar

BAIXAR pmicrotar-0.4

Quem é do mundo *nix já deve conhecer o formato *.tar, muitas vezes confundido com um tipo de compressão de arquivo. Na verdade, trata-se de um formato de empacotamento, apenas une vários arquivos ou, até mesmo, diretórios.

O formato TAR pode ser usado em conjunto com bibliotecas de compressão de dados dando assim origem a extensões como tar.gz, tar.xz ou tar.7z. Isto significa que os dados foram comprimidos e empacotados no formato TAR.

Pensando na importância de criar e manipular arquivos no formato TAR é que fiz uma biblioteca pequena, mas poderosa, baseada no microtar da linguagem C.

Com ela será possível ler, criar e manipular arquivos *.tar, tanto no Linux quanto Windows. Apenas o empacotamento, ela não faz a compressão, para isso veja as bibliotecas de compressão em Prisma.

Outro fato importante é que esta biblioteca não lê os arquivos, apenas monta o empacotamento, ficando a cargo do programador carregar os arquivos em string, empacotá-los e depois gravar em disco.

Exemplo pmicrotar :

Para mais exemplos, veja a pasta exemplo após fazer o download da biblioteca pmicrotar.

 

Manual de referência da biblioteca pmicrotar-0.4

Esta biblioteca é um binding do microtar em C https://github.com/rxi/microtar

Licença: MIT – permite ser usada e modificada ou mesmo vendida sem custos (mesma licença do microtar em C). O autor não poderá ser responsabilizado pelo seu uso.

O que é pmicrotar?

É uma biblioteca Prisma feita em C com funções básicas para arquivamento no formato *.tar.

Este formato não compacta, apenas une os arquivos. No entanto, normalmente é usado em conjunto

com uma outra lib que tenha função de compactação originando arquivos tar.gz, tar.xz etc.

Em prisma temos algumas libs que podem ser usadas com esta:

uma lzw escrita em puro Prisma e uma lz4 escrita em C: (Está junto com instalador prisma-1.0.101 ou superior.)

https://linguagemprisma.br4.biz/blog/prisma/conjunto-de-ferramentas-arq-arquivamento/

Este é um manual de referência, para detalhes de uso veja a pasta exemplos!

Para importar o módulo use: local mtar = inclua’pmicrotar’;

Funções:

1 – local tar, err = mtar.abra(arq,modo);

Abre um arquivo tar para leitura ou escrita.

Parâmetros:

arq – (string) nome do arquivo. (ex.: ‘teste.tar’);

modo – (string) modo de abertura de arquivo: ‘leitura’ / ‘escrita’ / ‘adicao’

retornos:

tar – objeto tar criado ou nulo em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

2 – local ret, err = mtar.escreva_cabecalho(tar, cab);

Escreve um cabeçalho no arquivo *.tar

Parâmetros:

tar – objeto tar criado previamente.

cab – uma tabela com campos de cabeçalho. Esta tabela contém os campos:

cab.modo= numero em octal (ex.: 664 , 775) permissão, use em Linux

cab.dono = numero (ex.: 0) id do proprietário.

cab.tamanho = numero tamanho do arquivo.

cab.tempo_modif = numero – tempo da última modificação. (Veja a função igdir.atritbutos da lib igdir)

cab.tipo = numero – tipo de arquivo ou diretório. Tipos suportados:

‘0’ = Regular – arquivo.

‘1’ = HardLink

‘2’ = Link simbólico

‘3’ = Caractere especial

‘4’ = Bloco especial

‘5’ = Diretório (pasta)

‘6’ = FIFO

‘7’ = Arquivo contíguo em disco.

Como é um número da tabela ASCII devemos usar a função cod(). Ou se preferir existe uma série de constantes de tipo predefinidas:

mtar.TIPO_REGULAR; mtar.TIPO_HARDLINK; mtar.TIPO_SYMLINK; mtar.TIPO_CAR; mtar.TIPO_BLOCO; mtar.TIPO_DIRETORIO; mtar.TIPO_FIFO; mtar.CONTIGUO;

cab.nome = ‘nome do arquivo’

cab.nomelink = ‘nome do link’

Retornos:

ret – verdadeiro ou falso em caso de erro

err(número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

3 – local ret, err = mtar.escreva_cabecalho_arquivo(tar,nome,tam);

Grava um cabeçalho específico de arquivo.

Parâmetros:

tar – objeto tar criado previamente.

nome – nome do arquivo a ser inserido. (ex.: ‘arq1.txt’);

tam – tamanho do arquivo a ser inserido; (use a função sis.tamanho para obter o tamanho);

Retornos:

ret – verdadeiro ou falso em caso de erro

err(número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

4 – local ret, err = mtar.escreva_dado(tar,dado);

Escreve o dado binário no arquivo tar.

Parâmetros:

tar – objeto tar crido previamente.

dado – (string) dado a ser gravado, um arquivo lido em modo binário. Ou qualquer string.

Retornos:

ret – verdadeiro ou falso em caso de erro

err(número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

5 – local ret, err = mtar.finalize(tar);

Finaliza o processo de gravação;

Parâmetros:

tar – objeto tar criado.

Retornos:

ret – verdadeiro ou falso em caso de erro

err(número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

6 – local ret, err = mtar.fecha(tar);

Fecha o objeto tar e libera memória.

Parâmetros:

tar – objeto tar criado.

Retornos:

ret – verdadeiro ou falso em caso de erro

err(número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

7 – local tab, err = mtar.leia_cabecalho(tar);

Finaliza o processo de gravação ou leitura.

Parâmetros:

tar – objeto tar criado.

Retornos:

tab – tabela com campos do cabeçalho ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

8 – local ret, err = mtar.proximo(tar);

Passa para o próximo cabeçalho. Num laço ‘para’ junto com a função leia_cabecalho(), é possível pegar o cabeçalho de cada arquivo.

Parâmetros:

tar – objeto tar criado.

Retornos:

ret – verdadeiro ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

9 – local dado, err = mtar.leia_dado(tar,nome);

Lê o dado binário inserido anteriormente.

Parâmetros:

tar – objeto tar criado.

nome – nome do arquivo inserido.

Retornos:

dado – string binária do arquivo inserido anteriormente.

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

10 – local tab, err = mtar.procure(tar,nome);

Procura por um arquivo ‘nome’ dentro do tar e retorna seu cabeçalho caso exista, ou nulo em erro.

Parâmetros:

tar – objeto tar criado.

nome – nome do arquivo inserido.

Retornos:

tab – tabela cabeçalho ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

11 – local ret, err = mtar.busque(tar,pos);

Busca uma nova posição.

Parâmetros:

tar – objeto tar criado.

pos – (número) posição nova a ser definida.

Retornos:

ret – verdadeiro ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

12 – local pos, err = mtar.anterior(tar);

Volta para o cabeçalho anterior.

Parâmetros:

tar – objeto tar criado.

Retornos:

pos – (número) posição ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

13 – local ret, err = mtar.escreva_cabecalho_dir(tar,nome);

Escreve um cabeçalho específico para diretório (pasta).

Parâmetros:

tar – objeto tar criado.

nome – nome do diretório (pasta).

Retornos:

ret – verdadeiro ou falso em caso de erro

err – (número) mensagem de erro. (use mtar.strerro(num_erro); para pegar a string de erro.

14 – local str_erro = mtar.strerro(NumErro);

As funções acima

Parâmetros:

NumErro : número de erro retornado por uma função microtar.

Retornos:

str_erro : string descrevendo número de erro, ou erro_desconhecido caso o número de erro não seja válido.

15 – str_versao = mtar.versao;

Variável predefinida contendo string que descreve a versão desta biblioteca.

A saída pode ser: lib pmicrotar-0.4 (simples lib tar)

16 – Variáveis predefinidas de erro:

mtar.SUCESSO = 0;

mtar.FALHA = -1;

mtar.FALHA_AO_ABRIR = -2;

mtar.FALHA_AO_LER = -3;

mtar.FALHA_AO_ESCREVER = -4;

mtar.FALHA_AO_BUSCAR = -5;

mtar.CHECKSUM_INVALIDO = -6;

mtar.CAMPO_NULO = -7;

mtar.NAO_ENCONTRADO = -8;

mtar.MODO_INVALIDO = -9;

mtar.MTAR_INVALIDO = -10;

mtar.CABECALHO_INVALIDO = -11;

16 – Variáveis predefinidas de tipos de arquivos:

mtar.TIPO_REGULAR; //REGULAR

mtar.TIPO_HARDLINK ; //HARD LINK

mtar.TIPO_SYMLINK; //SYMLINK

mtar.TIPO_CAR; //CHAR

mtar.TIPO_BLOCO; //BLOCK

mtar.TIPO_DIRETORIO; //DIRECTORY

mtar.TIPO_FIFO; //FIFO

mtar.CONTIGUO; //CONTIGUOUS

Visite o site oficial Prisma: http://linguagemprisma.br4.biz

e-mail: linguagemprisma@gmail.com

Para dúvidas, críticas ou sugestões: http://linguagemprisma.br4.biz/prisma_forum

FIM

fim!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *