This shows you the differences between two versions of the page.
so:laboratoare:laborator-02 [2021/03/10 16:25] teodor_stefan.dutu [Exercițiul 1 - cat] Nota despre citirea in bucla |
so:laboratoare:laborator-02 [2022/03/11 16:38] (current) aapostolescu [Trunchierea fișierelor] typo |
||
---|---|---|---|
Line 59: | Line 59: | ||
<code c> | <code c> | ||
- | int open(const char *pathname, int flag); /* deschidere */ | + | int open(const char *pathname, int flags); /* deschidere */ |
int open(const char *pathname, int flags, mode_t mode); /* creare */ | int open(const char *pathname, int flags, mode_t mode); /* creare */ | ||
</code> | </code> | ||
Line 192: | Line 192: | ||
</code> | </code> | ||
- | În cazul [[http://linux.die.net/man/2/ftruncate|ftruncate]], parametrul ''fd'' este file descriptorul obținut cu un apel open, care a asigurat drept de scriere. În cazul [[http://linux.die.net/man/2/ftruncate|truncate]], fișierul reprezentat prin ''path'' trebuie să aibe drept de scriere. | + | În cazul [[http://linux.die.net/man/2/ftruncate|ftruncate]], parametrul ''fd'' este file descriptorul obținut cu un apel open, care a asigurat drept de scriere. În cazul [[http://linux.die.net/man/2/ftruncate|truncate]], fișierul reprezentat prin ''path'' trebuie să aibă drept de scriere. |
==== Exemplu utilizare operații I/O === | ==== Exemplu utilizare operații I/O === | ||
Line 685: | Line 685: | ||
</note> | </note> | ||
- | ==== Exercițiul -1 - GSOC ==== | + | ==== Exercițiul 0 - Stagii pe bune ==== |
- | Google Summer of Code este un program de vară în care studenții | + | [[https://stagiipebune.ro/students/jobs/|Stagii pe bune]] este o platformă de internshipuri care vrea să ușureze și să uniformizeze procesul prin care puteți aplica la companii din România (București, Iași, Cluj și Timișoara). Facultatea de Automatică și Calculatoare are un parteneriat cu Stagii pe bune și vă încurajăm să le folosiți platforma pentru a aplica la internshipuri! |
- | (indiferent de anul de studiu) sunt implicați în proiecte Open Source | + | |
- | pentru a își dezvolta skill-urile de programare, fiind răsplătiți cu o | + | |
- | bursă a cărei valoare [[https://developers.google.com/open-source/gsoc/help/student-stipends|depinde de țară]] | + | |
- | ([[https://developers.google.com/open-source/gsoc|pagină principală GSOC]]). | + | |
- | + | ||
- | UPB se află în top ca număr de studenți acceptați; în fiecare an fiind | + | |
- | undeva la aprox. 30-40 de studenți acceptați. | + | |
- | Vă încurajăm să aplicați! Există și un grup de fb cu foști | + | |
- | participanți unde puteti să îi contactați pentru sfaturi | + | |
- | [[https://www.facebook.com/groups/240794072931431/|facebook page]] | + | |
+ | Stagii pe bune organizează și evenimente de prezentare a celor mai mari companii din România. Pentru a fi la curent cu acestea, urmăriți și anunțurile postate de Stagii pe bune pe [[https://www.facebook.com/stagiipebune|Facebook]]. | ||
===== Linux ===== | ===== Linux ===== | ||
Line 800: | Line 791: | ||
Revedeți secțiunile [[#crearea deschiderea si inchiderea|Crearea, deschiderea și închiderea fișierelor]], cât și [[#citirea si scrierea|Citirea și scrierea fișierelor]]. | Revedeți secțiunile [[#crearea deschiderea si inchiderea|Crearea, deschiderea și închiderea fișierelor]], cât și [[#citirea si scrierea|Citirea și scrierea fișierelor]]. | ||
- | Urmăriți comentariile cu ''TODO 1''. | + | Urmăriți comentariile cu ''TODO 1''. Pentru testare folosiți-vă de fișierele din directorul ''tests''. Pentru a compara două fișiere, puteți folosi utilitarul ''comp'' astfel: |
+ | <code> | ||
+ | PS C:...> .\crc.exe -g tests\test_in\test1.in crc1.out | ||
+ | PS C:...> comp.exe crc1.out tests\test_out\test1.out | ||
+ | </code> | ||
=== 2b. Comparare === | === 2b. Comparare === | ||
Line 810: | Line 805: | ||
* Folosiți doar funcția ''[[http://msdn.microsoft.com/en-us/library/aa365541%28VS.85%29.aspx|SetFilePointer]]'' | * Folosiți doar funcția ''[[http://msdn.microsoft.com/en-us/library/aa365541%28VS.85%29.aspx|SetFilePointer]]'' | ||
- | Dacă dimensiunile sunt egale, comparați cele 2 fișiere bucată cu bucată. Deși în acest caz particular fișierele de comparat conțin doar câte un CRC de 4 octeți, funcția trebuie să trateze și cazul în care fișierele sunt mai mari. Nu citiți tot fișierul în memorie, ci câte ''CHUNKSIZE = 32'' bytes o dată. Urmăriți comentariile marcate cu ''TODO 3''. | + | Dacă dimensiunile sunt egale, comparați cele 2 fișiere bucată cu bucată. Funcția trebuie să compare corect cele două fișiere, indiferent de dimensiunea acestora. Nu citiți tot fișierul în memorie, ci câte ''CHUNKSIZE = 32'' bytes o dată. Pentru aceasta, va trebui să implementați funcția ''ReadChunk'', urmand indicațiile de la ''TODO 3''. Apoi, urmăriți comentariile marcate cu ''TODO 4''. |
+ | |||
+ | <note important> | ||
+ | Pentru a putea compara un fișier cu el însuși, va trebui ca în cadrul funcției ''CompareFiles'' să deschideți ambele fișiere folosind ''FILE_SHARE_READ''. | ||
+ | </note> | ||
==== BONUS - Linux ==== | ==== BONUS - Linux ==== | ||
Line 844: | Line 843: | ||
* se iterează această listă folosind funcția: [[http://msdn.microsoft.com/en-us/library/aa364428%28VS.85%29.aspx|FindNextFile]] | * se iterează această listă folosind funcția: [[http://msdn.microsoft.com/en-us/library/aa364428%28VS.85%29.aspx|FindNextFile]] | ||
- | Pentru rezolvare, urmăriți comentariile marcate cu ''TODO 1''. | + | Pentru rezolvare, urmăriți comentariile marcate cu ''TODO 1''. Ca să afișați detaliile cu o spațiere consecventă, folosiți funcția ''PrintPadding'' definită în schelet, iar 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> | + | |
== Afișare detalii pentru parametrul -a == | == Afișare detalii pentru parametrul -a == | ||
Line 872: | Line 870: | ||
*Operații cu fișiere în Python | *Operații cu fișiere în Python | ||
*Studiați exemplele din {{so:laboratoare:pyfileoperations.zip|arhivă}}, citiți documentația și observați diferențele între API-uri | *Studiați exemplele din {{so:laboratoare:pyfileoperations.zip|arhivă}}, citiți documentația și observați diferențele între API-uri | ||
- | |||
- | |||
- | ===== Soluții ===== | ||
- | |||
- | [[http://elf.cs.pub.ro/so/res/laboratoare/lab02-sol.zip | lab02-sol.zip]] | ||