Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:teme_2014:tema5 [2013/12/26 18:17]
laura.vasilescu [Cerința temei]
programare:teme_2014:tema5 [2014/01/10 21:49] (current)
laura.vasilescu [Trimitere temă]
Line 8: Line 8:
  
 **Deadline (hard):** joi, 16 ianuarie, ora 23:55 **Deadline (hard):** joi, 16 ianuarie, ora 23:55
 +
 +** checker: ** [[http://​lauravasilescu.ro/​5-tar.zip|http://​lauravasilescu.ro/​5-tar.zip]] [05.01.2014,​ ora 21:00]
  
 ====== Obiective ====== ====== Obiective ======
Line 28: Line 30:
   * **usermap.txt**   * **usermap.txt**
   * **file_ls**   * **file_ls**
-  * + 
 +Programul vostru trebuie să fie capabil de a verificat existența celor două fișiere. Acesta poate presupune că informația găsită în interior, este una corectă.  
 == usermap.txt == == usermap.txt ==
  
-Conține output-ul comenzii ''​cat /​etc/​passwd''​. ​+Conține output-ul comenzii ''​cat /​etc/​passwd''​. Exemplu: 
 +<​code>​ 
 +[...] 
 +sshd:​x:​114:​65534::/​var/​run/​sshd:/​usr/​sbin/​nologin 
 +[...] 
 +admin:​x:​1003:​118::/​home/​admin:/​bin/​sh 
 +[...] 
 +mysql:​x:​116:​127:​MySQL Server,,,:/​nonexistent:/​bin/​false 
 +[...] 
 +ntp:​x:​121:​135::/​home/​ntp:/​bin/​false 
 +[...] 
 +lvasilescu:​x:​1008:​1008:​Laura Vasilescu,,,:/​home/​lvasilescu:/​bin/​bash 
 +</​code>​ 
 + 
 +*) Am folosit ''​[...]''​ pentru a simboliza faptul că mai existau și alte linii; Fișierul ''/​etc/​passwd''​ este, de regulă, destul de lung, dar nu avea sens postarea lui integrală aici.
    
 == file_ls ==  == file_ls == 
Line 37: Line 55:
 Se obține din output-ul generat de comanda ''​ls -la --time-style=full-iso''​ în directorul în care se află fișierele pe care dorim să le arhivăm. ​ Se obține din output-ul generat de comanda ''​ls -la --time-style=full-iso''​ în directorul în care se află fișierele pe care dorim să le arhivăm. ​
  
-Se păstrează doar linile care fac referire la fișierele pe care dorim să le includem în arhivă. ​+Se păstrează doar linile care fac referire la fișierele pe care dorim să le includem în arhivă. Exemplu: 
 +<​code>​ 
 +-rw-rw-r-- 1 lvasilescu lvasilescu ​     8 2013-12-16 17:​55:​15.882089310 +0200 a 
 +-rw-rw-r-- 1 lvasilescu lvasilescu 214200 2013-12-16 17:​55:​10.190055687 +0200 test 
 +</​code>​ 
 + 
 +===== Comenzi de intrare ===== 
 +După cum spuneam, programul acceptă comenzi de la **standard input**. 
 + 
 +Fiecare comandă reprezintă o linie. Puteți presupune că o linie are maximum 511 caractere. 
 + 
 +Mai jos sunt descrise comenzile pe care trebuie să le recunoască programul vostru: 
 +== load archivename == 
 +Această comandă creează arhiva, folosindu-se de informații extrase din ''​usermap.txt''​ și ''​file_ls''​.  
 + 
 +''​archivename''​ reprezintă numele arhivei ce va fi creată. 
 + 
 +Î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''​. 
 +== list archivename == 
 +Comanda va lista în consolă numele fișierelor din arhivă. Câte unul pe linie. 
 + 
 +== get archivename filename == 
 +Comanda va extrage din arhivă conținutul fișierului ''​filename''​ și îl va afișa în consolă. 
 + 
 +În urma acestei comenzi, conținutul arhivei rămâne identic. 
 + 
 +== quit == 
 +Închide programul. 
 +===== Formatul arhivei tar ===== 
 + 
 +Mai multe detalii găsiți [[http://​www.mksxserver.com/​docs/​man4/​tar.4.asp|aici]]. 
 +Practica, structura header-ului ar trebui să fie ceva de genul: 
 +<​code>​ 
 +union record { 
 +        char charptr[512];​ 
 +        struct header { 
 +                char name[100];​ 
 +                char mode[8]; 
 +                char uid[8]; 
 +                char gid[8]; 
 +                char size[12]; 
 +                char mtime[12];​ 
 +                char chksum[8];​ 
 +                char typeflag; 
 +                char linkname[100];​ 
 +                char magic[8]; 
 +                char uname[32];​ 
 +                char gname[32];​ 
 +                char devmajor[8];​ 
 +                char devminor[8];​ 
 +        } header; 
 +}; 
 +</​code>​ 
 + 
 +Câmpurile **name**, **mode**, **uid**, **gid**, **size**, **mtime**, **uname**, **gname** vor fi determinate din fișierele ''​usermap.txt''​ și/sau ''​file_ls''​. 
 + 
 +**chksum** se compltează făcând suma între toți octeții ce alcătuiesc headerul. 
 + 
 +**typeflag** va fi 0. 
 + 
 +**linkname** reprezintă numele fișierului. 
 + 
 +**magic** o să fie string-ul "​GNUtar " (atenție, e un spațiu la final!) 
 + 
 +**devmajor** și **devminor** o să fie 0. 
 + 
 +<​note>​ 
 +Toate valorile trebuie să fie în **octal**. Vedeți în documentație. 
 +</​note>​ 
 + 
 +===== Trimitere temă ===== 
 + 
 + 
 + 
 +  * Tema va fi trimisă atât pe [[https://​elf.cs.pub.ro/​vmchecker/​|vmchecker]] cât și pe [[http://​cs.curs.pub.ro|moodle]],​ sub forma unei arhive ZIP. 
 +  * Arhiva va trebui să conţină ''​în directorul rădăcină''​ doar următoarele:​ 
 +     * Codul sursă al programului vostru (fişierele ''​.c''​ şi eventual ''​.h''​). 
 +     * Un fişier ''​Makefile''​ care să conţină regulile ''​build''​ şi ''​clean''​. Regula ''​build''​ va compila programul într-un executabil cu numele **''​my_tar''​**. Regula ''​clean''​ va şterge executabilul şi eventual toate binarele intermediare (fişiere obiect) generate de voi. 
 +     * Un fişier ''​README''​ care să conţină prezentarea implementării alese de voi. 
 +  * O temă care nu compilează nu va primi nici un punct. 
 +  * Criteriile de notare sunt următoarele:​ 
 +     * **''​90 puncte''​** - testele automate din arhiva de testare. 
 +     * **''​10 puncte''​** - calitatea şi eficienţa implementării,​ explicaţiile din README şi aspectul codului sursă.
  
programare/teme_2014/tema5.1388074657.txt.gz · Last modified: 2013/12/26 18:17 by laura.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0