Într-o arhivă tar (numele provine de la "tape archive"), fiecare fișier e precedat de un antet de 512 octeți (un sector), și rotunjit în sus la un număr întreg de sectoare, ultimul sector fiind completat cu octeți nuli. Arhiva se termină cu două sectoare nule.
Programul va fi rulat cu comanda
tar comandă fișier1 fișier2 ... fișierN
Primul caracter al comenzii va fi unul din:
c : crează arhivă
x : extrage din arhivă
Opțional, comanda poate să aibă ca al doilea caracter litera f.
În acest caz, primul argument fișier care urmează e numele arhivei; dacă
litera f lipsește, programul citește/scrie arhiva (de) la
intrarea /ieșirea standard. Celelalte nume de fișiere sunt cele care trebuie
arhivate/dezarhivate. Pentru comanda x, dacă nu se dau nume de
fișiere se dezarhivează toate fișierele din arhivă.
Antetul memorat în arhivă pentru fiecare fișier conține numele fișierului la octetul 0, pe o lungime de max. 100 octeți, inclusiv terminatorul nul (fișiere cu nume mai lungi nu pot fi arhivate). La deplasamentul 124, pe o lungime de 12 octeți, se găsește lungimea fișierului, ca șir de cifre octale, completat la stânga cu cifre 0 și terminat cu caracterul nul. (Formatul complet e descris în fișierul /usr/include/tar.h).
Implementați în primul rând comanda x cu extragerea tuturor
fișierelor. Citiți arhiva secvențial (de exemplu câte un sector), și
extrageți fișierele cu lungimea specificată în arhivă (fără rotunjire
la sectoare întregi). Puteți verifica programul pe o arhivă reală creată
cu programul UNIX tar folosind aceeași sintaxă.
Implementați apoi comanda c. Pentru a afla de la început care
e dimensiunea fiecărui fișier de arhivat, puteți folosi funcția
fseek cu ultimii doi parametri 0 și respectiv SEEK_END
odată ce fișierul a fost deschis (după care va trebui să repoziționați
indicatorul la început de fișier). În final, implementați comanda x
cu extragerea selectivă doar a acelor fișiere care sunt specificate în
linia de comandă. Pentru aceasta, citiți arhiva secvențial și "săriți"
peste fișierul curent daca acesta nu trebuie extras.
Toate fișierele vor fi deschise în mod binar. Vă veți putea verifica
implementarea lui c doar cu propria implementare a lui x
și nu cu programul UNIX tar deoarece varianta simplificată
propusă aici nu completează toate câmpurile din antet.