Vasilică dorește crearea unui utilitar ce va arhiva un set de fișiere, fără a le comprima. Utilitarul va permite pe lânga crearea unei arhive, o serie de operații asupra unei arhive create anterior:
listarea numelor de fișiere existente în arhivă
extragerea unui anume fișier dintr-o arhivă
modificarea unei arhive în vederea setării unor noi drepturi pentru un fișier
adaugarea (append) a unui fișier în arhivă
Toate operațiile de mai sus se vor executa la primirea unor comenzi date de utilizator.
Realizarea arhivei
Arhiva se va realiza prin concatenarea conținutului fișierelor ce compun arhiva. Pentru fiecare fișier se va scrie în arhivă mai întâi un header ce descrie specificațiile acestuia, urmat de conținutul propriu zis. Headerul va respecta specificațiile tar descrise aici și aici
name, mode, uid, gid, size, mtime, uname, gname vor fi determinate din fișierele date la intrare.
checksum se completeaza făcând SUMA între toți octeții ce alcătuiesc headerul.
linkflag va fi 0
linkname=filename
magic =GNUmagic=”GNUtar “
devmajor și devminor vor fi egale cu 0.
Precizare: TOATE VALORILE TREBUIE SA FIE IN OCTAL
Formatul datelor de intrare
O dată pornit, programul va aștepta să primească una din urmatoarele comenzi:
load file_ls usermap.txt archivename
file_ls este numele unui fișier în care se gasește outputul generat de comanda ls -la în cadrul unui director.
usermap.txt este un fișier ce va conține outputul generat de comanda cat /etc/passwd
archivename este numele arhivei ce va fi create.
în urma acestei comenzi trebuie să se obțină o arhivă cu numele cerut, care să conțină toate fișierele (fără directoare) enumerate în file_ls. Fișierele file_ls și usermap.txt vor fi create anterior execuției programului (nu trebuie să le generați voi decât pentru propria testare a temei).
list archivename
în urma acestei comenzi se vor lista (la consolă) numele fișierelor conținute în arhivă
get archivename filename
în urma acestei comenzi se va extrage conținutul fișierului specificat de filename, din cadrul arhivei date de archivename și se va afisa la consola.
set archivename NNN filename
în urma acestei comenzi se vor seta în arhivă noi drepturi pentru fișierul filename.
drepturile sunt date în format numeric (ex: 766 = toate drepturile pentru user, și doar drept de citire și scriere pentru group și others)
put archivename filename file_ls usermap.txt
în urma acestei comenzi se va adauga fișierul specificat prin filename la sfarșitul arhivei date de archivename.
fișierul nu va fi adăugat în condițiile în care el există deja în arhivă
Autori: Simion Alina, Florin Pop
Data: 18 ianuarie 2009