Differences

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

Link to this comparison view

so:laboratoare:laborator-02 [2019/02/24 17:19]
bogdan.purcareata [Exercițiul 1 - redirect (1p)]
so:laboratoare:laborator-02 [2020/02/21 15:38] (current)
liza_elena.babu [Scrierea și citirea]
Line 139: Line 139:
 </​code>​ </​code>​
  
-Funcția [[http://​linux.die.net/​man/​2/​read|read]] întoarce numărul de octeți efectiv citiți, cel mult ''​count''​. Valoarea minimă este de ''​1''​ octet, iar când se ajunge la sfârșitul de fișier se va întoarce ''​0''​.+Funcția [[http://​linux.die.net/​man/​2/​read|read]] întoarce numărul de octeți efectiv citiți, ​**cel mult** ''​count''​. Valoarea minimă este de ''​1''​ octet, iar când se ajunge la sfârșitul de fișier se va întoarce ''​0''​.
  
 === write === === write ===
Line 149: Line 149:
 </​code>​ </​code>​
  
-Valoarea întoarsă este numărul de octeți ce au fost efectiv scriși, cel mult ''​count''​. În mod implicit nu se garantează că la revenirea din [[http://​linux.die.net/​man/​2/​write|write]] scrierea în fișier s-a terminat. Pentru a forța actualizarea se poate folosi [[http://​linux.die.net/​man/​2/​fsync|fsync]] sau fișierul se poate deschide folosind flagul ''​O_FSYNC'',​ caz în care se garantează că după fiecare write fișierul a fost actualizat.+Valoarea întoarsă este numărul de octeți ce au fost efectiv scriși, ​**cel mult** ''​count''​. În mod implicit nu se garantează că la revenirea din [[http://​linux.die.net/​man/​2/​write|write]] scrierea în fișier s-a terminat. Pentru a forța actualizarea se poate folosi [[http://​linux.die.net/​man/​2/​fsync|fsync]] sau fișierul se poate deschide folosind flagul ''​O_FSYNC'',​ caz în care se garantează că după fiecare write fișierul a fost actualizat.
  
 **Observație 1**:  **Observație 1**: 
Line 254: Line 254:
 </​code>​ </​code>​
 * dup * dup
-  * creaza ​o copie a unui file descriptor/ +  * crează ​o copie a unui file descriptor. 
-  * utilizeaza ​cel mai mic numar de descriptor neutilizat. +  * utilizează ​cel mai mic număr ​de descriptor neutilizat. 
-  * daca apelul ​reuseste, vechiul ​si noul file descriptor pot fi folositi, ei partajand ​file offset ​si file status flags.+  * dacă apelul ​reușește, vechiul ​și noul file descriptor pot fi folosiți, ei partajând ​file offset ​și file status flags.
  * dup2  * dup2
-   ​* ​asemanator ​dup, dar in loc sa se aleaga ​cel mai mic descriptor, acesta ​utilizeaza ​new_fd specificat. +   ​* ​asemănător ​dup, dar în loc să se aleagă ​cel mai mic descriptor, acesta ​utilizează ​new_fd specificat. 
-   ​* ​daca new_fd este deja fosit, acesta este mai intai inchis inainte ​de a fi reutilizat. +   ​* ​dacă new_fd este deja folosit, acesta este mai întâi închis înainte ​de a fi reutilizat. 
-   ​* ​daca old_fd nu este valid, apelul ​esueaza ​iar new_fd nu este inchis.+   ​* ​dacă old_fd nu este valid, apelul ​eșueaza ​iar new_fd nu este închis.
  
  
Line 269: Line 269:
 </​code>​ </​code>​
  
-Imaginea de mai jos prezinta ​utilizarea dup si dup2 in diferite ​situatii ​pentru o intelegere ​mai buna:+Imaginea de mai jos prezintă ​utilizarea dup și dup2 în diferite ​situații ​pentru o înțelegere ​mai bună:
  
  
Line 686: Line 686:
 [[https://​www.facebook.com/​groups/​240794072931431/​|facebook page]] [[https://​www.facebook.com/​groups/​240794072931431/​|facebook page]]
  
-==== Exercițiul 0 - Joc interactiv ==== 
- 
-    * Detalii desfășurare [[http://​ocw.cs.pub.ro/​courses/​so/​meta/​notare#​joc_interactiv|joc]]. 
  
 ===== Linux ===== ===== Linux =====
Line 741: Line 738:
 === 3c. /dev/nasty === === 3c. /dev/nasty ===
  
-Inițializați fișierul ''/​dev/​nasty'':<​code bash>​./​set_nasty.sh</​code>​+Inițializați fișierul ''/​dev/​nasty'':​ 
 +<code bash> 
 +sudo apt-get install linux-modules-$(uname -r) linux-headers-$(uname -r) 
 +./​set_nasty.sh 
 +</​code>​
  
 Încercați funcționalitatea de copiere pe fișierul ''/​dev/​nasty'':​ <code bash>​./​mcat /dev/nasty Încercați funcționalitatea de copiere pe fișierul ''/​dev/​nasty'':​ <code bash>​./​mcat /dev/nasty
Line 750: Line 751:
 Testați **scrierea** cu: <code bash>​./​mcat Makefile /dev/nasty ; cat /​dev/​nasty</​code>​ Testați **scrierea** cu: <code bash>​./​mcat Makefile /dev/nasty ; cat /​dev/​nasty</​code>​
 <note tip> <note tip>
-În cazul în care ultima comandă nu produce rezultatul așteptat, cel mai probabil nu ați tratat corect cazurile în care ''​read''/''​write''​ întorc o valoare mai mică decât al treilea parametru.  ​+În cazul în care ultima comandă nu produce rezultatul așteptat, cel mai probabil nu ați tratat corect cazurile în care ''​read''/''​write''​ întorc o valoare mai mică decât al treilea parametru ​- i.e. nu s-a citit/scris tot.  ​
  
 **Hint: ** Pentru a garanta scrierea/​citirea numarului exact de bytes care este dat ca parametru, se recomanda apelarea read/write **in bucla.** ​ **Hint: ** Pentru a garanta scrierea/​citirea numarului exact de bytes care este dat ca parametru, se recomanda apelarea read/write **in bucla.** ​
Line 756: Line 757:
 </​note>​ </​note>​
  
-===== Windows ​(4p) =====+===== Windows =====
  
 <note important>​Executabilele sunt generate în directorul ''​win/​Debug''​ (în directorul ''​Debug''​ al soluției, nu al fiecărui proiect în parte).</​note>​ <note important>​Executabilele sunt generate în directorul ''​win/​Debug''​ (în directorul ''​Debug''​ al soluției, nu al fiecărui proiect în parte).</​note>​
  
-==== Exercițiul 1 - cat (0.5p) ​====+==== Exercițiul 1 - cat ====
  
 Deschideți folderul ''​win''​ din arhiva laboratorului 2 și intrați în proiectul ''​1-cat'',​ iar apoi urmăriți sursa ''​cat.c''​ Deschideți folderul ''​win''​ din arhiva laboratorului 2 și intrați în proiectul ''​1-cat'',​ iar apoi urmăriți sursa ''​cat.c''​
Line 766: Line 767:
 Compilați și testați executabilul ''​cat.exe''​ folosind command prompt-ul de Visual Studio: Tools -> Visual Studio Command Prompt Compilați și testați executabilul ''​cat.exe''​ folosind command prompt-ul de Visual Studio: Tools -> Visual Studio Command Prompt
  
-==== Exercițiul 2 - CRC (3.5p) ​====+==== Exercițiul 2 - CRC ====
  
 Exercițiul are ca scop realizarea unui utilitar care: Exercițiul are ca scop realizarea unui utilitar care:
Line 772: Line 773:
   * Pentru două fișiere date (în acest caz, de CRC), le compară și determină dacă sunt identice.   * Pentru două fișiere date (în acest caz, de CRC), le compară și determină dacă sunt identice.
  
-=== 2a. Generare ​(1.5p) ​===+=== 2a. Generare ===
  
 Deschideți fișierul ''​crc.c''​ din proiectul ''​2-crc''​ și completați funcția ''​GenerateCrc''​. Deschideți fișierul ''​crc.c''​ din proiectul ''​2-crc''​ și completați funcția ''​GenerateCrc''​.
Line 782: Line 783:
 Urmăriți comentariile cu ''​TODO 1''​. Urmăriți comentariile cu ''​TODO 1''​.
  
-=== 2b. Comparare ​(2p) ===+=== 2b. Comparare ===
  
 Odată calculat fișierul cu CRC, vrem să vedem dacă două fișiere de CRC sunt egale. Extindeți funcționalitatea programului anterior astfel încât să compare 2 fișiere. Vom lucra în funcția ''​CompareFiles''​. Odată calculat fișierul cu CRC, vrem să vedem dacă două fișiere de CRC sunt egale. Extindeți funcționalitatea programului anterior astfel încât să compare 2 fișiere. Vom lucra în funcția ''​CompareFiles''​.
Line 794: Line 795:
 ==== BONUS - Linux ==== ==== BONUS - Linux ====
  
-== 1 so karma - Troubleshooting ==+== Troubleshooting ==
  
 Intrați în directorul ''​4-trouble''​. Compilați și rulați programul ''​trouble''​. Intrați în directorul ''​4-trouble''​. Compilați și rulați programul ''​trouble''​.
Line 802: Line 803:
 Ce observați? Identificați și remediați problema. Revedeți secțiunea: [[#crearea deschiderea si inchiderea fisierelor|Crearea,​ deschiderea și închiderea fișierelor]]. Ce observați? Identificați și remediați problema. Revedeți secțiunea: [[#crearea deschiderea si inchiderea fisierelor|Crearea,​ deschiderea și închiderea fișierelor]].
  
-== 1 so karma - File lock ==+== File lock ==
  
 Vrem să ne asigurăm că doar **o instanță** a unui program rulează la un moment dat. Pentru asta se creează un fișier temporar pe care se încearcă obținerea unui lock folosind apelul [[http://​linux.die.net/​man/​2/​flock | flock]]. Vrem să ne asigurăm că doar **o instanță** a unui program rulează la un moment dat. Pentru asta se creează un fișier temporar pe care se încearcă obținerea unui lock folosind apelul [[http://​linux.die.net/​man/​2/​flock | flock]].
Line 816: Line 817:
 Utilitar echivalent cu ''​ls -a -R''​. Utilitar echivalent cu ''​ls -a -R''​.
  
-== 1 so karma - Creare utilitar ls ==+== Creare utilitar ls ==
  
 Deschideți din arhiva laboratorului 2 proiectul ''​3-ls''​. Completați fișierul ''​ls.c''​ pentru ca programul ''​3-ls.exe''​ să se comporte ca utilitarul ''​ls''​. Deschideți din arhiva laboratorului 2 proiectul ''​3-ls''​. Completați fișierul ''​ls.c''​ pentru ca programul ''​3-ls.exe''​ să se comporte ca utilitarul ''​ls''​.
Line 827: Line 828:
 Pentru testare folosiți dintr-un prompt Visual Studio: <code bash>​ls.exe ..</​code>​ Pentru testare folosiți dintr-un prompt Visual Studio: <code bash>​ls.exe ..</​code>​
  
-== 1 so karma - Afișare detalii pentru parametrul -a ==+== Afișare detalii pentru parametrul -a ==
  
 Pentru fișiere afișați numele, dimensiunea și data la care au fost modificate ultima oară. Pentru fișiere afișați numele, dimensiunea și data la care au fost modificate ultima oară.
Line 835: Line 836:
    * Urmăriți comentariile marcate cu  ''​TODO 2''​    * Urmăriți comentariile marcate cu  ''​TODO 2''​
  
-== 1 so karma - Afișare detalii pentru parametrul -R ==+== Afișare detalii pentru parametrul -R ==
  
 Realizați parcurgerea recursivă a directoarelor prin apelarea recursivă a funcției ''​ListFile''​. Realizați parcurgerea recursivă a directoarelor prin apelarea recursivă a funcției ''​ListFile''​.
Line 841: Line 842:
 Pentru rezolvare, urmăriți comentariile marcate cu ''​TODO 3''​. Aveți grijă să concatenați numele noului director la calea deja existentă. Pentru rezolvare, urmăriți comentariile marcate cu ''​TODO 3''​. Aveți grijă să concatenați numele noului director la calea deja existentă.
  
-== 1 so karma - Troubleshooting ==+== Troubleshooting ==
  
 Deschideți din arhiva laboratorului 2 proiectul ''​4-trouble''​. Programul ar trebui să creeze un fișier cu mesajul "​Testing 123". Deschideți din arhiva laboratorului 2 proiectul ''​4-trouble''​. Programul ar trebui să creeze un fișier cu mesajul "​Testing 123".
Line 856: Line 857:
  
 [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab02-sol.zip | lab02-sol.zip]] [[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab02-sol.zip | lab02-sol.zip]]
 +
 +
  
 ===== Resurse utile ===== ===== Resurse utile =====
so/laboratoare/laborator-02.1551021578.txt.gz · Last modified: 2019/02/24 17:19 by bogdan.purcareata
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