Arhivator de fișiere

 

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