This shows you the differences between two versions of the page.
so:teme:tema-2 [2019/04/02 17:32] adrian.sendroiu [Testare] |
so:teme:tema-2 [2022/11/06 17:50] (current) ionut.mihalache1506 |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | <hidden> | ||
====== Tema 2 Bibliotecă stdio ====== | ====== Tema 2 Bibliotecă stdio ====== | ||
<note important> | <note important> | ||
- | * Dată publicare: **14.03.2019** | + | * Dată publicare: **24.03.2022** |
- | * <html><b><span style="color:blue;">Deadline</span></b></html>: **03.04.2019, ora 23:55** | + | * <html><b><span style="color:blue;">Deadline</span></b></html>: **7.04.2022, ora 23:55** |
- | * <html><b><span style="color:red;">Deadline hard</span></b></html>: **10.04.2019, ora 23:55** | + | * <html><b><span style="color:red;">Deadline hard</span></b></html>: **10.04.2022, ora 23:55** |
</note> | </note> | ||
Line 28: | Line 29: | ||
**Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. | **Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. | ||
- | Ca să vă creați un repo de gitlab în instanța facultății: în repository-ul [[https://github.com/systems-cs-pub-ro/so-assignments|so-assignments]] de pe Github se află un script Bash care vă ajută să vă creați un repository privat pe instanța de Gitlab a facultății, unde aveți la dispoziție 5 repository-uri private utile pentru teme. Urmăriți indicațiile din README și de pe [[:so:teme:folosire-gitlab|wiki-ul SO]]. | + | Pentru a folosi ''git'', puteți să vă creați un repository privat pe [[https://github.com/|github]] și să dați drepturi de citire pentru **molecula2788**. |
- | Motivul pentru care încurajăm acest lucru este că responsabilii de teme se pot uita mai rapid pe [[https://gitlab.cs.pub.ro|Gitlab]] la temele voastre pentru a vă ajuta în cazul în care întâmpinați probleme/bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://gitlab.cs.pub.ro|Gitlab]]. | + | Motivul pentru care încurajăm acest lucru este că responsabilii de teme se pot uita mai rapid pe [[https://github.com/|github]] la temele voastre pentru a vă ajuta în cazul în care întâmpinați probleme/bug-uri. |
Crash-course practic de git puteți găsi aici: [[http://gitimmersion.com/lab_01.html#main_content|git-immersion]] | Crash-course practic de git puteți găsi aici: [[http://gitimmersion.com/lab_01.html#main_content|git-immersion]] | ||
+ | |||
+ | **Dacă ați creat deja un repo privat pe [[https://gitlab.cs.pub.ro|Gitlab]] puteți să-l folosiți în continuare pe acela**. | ||
</note> | </note> | ||
<note important> | <note important> | ||
- | Atât semnătura pentru funcția de comparare (veți vedea mai jos pentru ce vă trebuie), cât și testele publice care se rulează pe vmchecker se găsesc pe [[https://github.com/systems-cs-pub-ro/so-assignments/tree/master/2-stdio/|repo-ul so-assignments de pe Github]]: | + | Atât semnătura pentru funcția de comparare (veți vedea mai jos pentru ce vă trebuie), cât și testele publice care se rulează pe vmchecker se găsesc pe [[https://github.com/systems-cs-pub-ro/so/tree/master/assignments/2-stdio|repo-ul so-assignments de pe Github]]: |
<code bash> | <code bash> | ||
- | student@so:~$ git clone https://github.com/systems-cs-pub-ro/so-assignments.git | + | student@so:~$ git clone https://github.com/systems-cs-pub-ro/so |
- | student@so:~$ cd so-assignments/2-stdio | + | student@so:~$ cd assignments/2-stdio |
</code> | </code> | ||
Line 60: | Line 63: | ||
Rezolvarea temei va trebui să genereze o bibliotecă dinamică numită ''libso_stdio.so''/''so_stdio.dll'' care implementează header-ul | Rezolvarea temei va trebui să genereze o bibliotecă dinamică numită ''libso_stdio.so''/''so_stdio.dll'' care implementează header-ul | ||
- | [[https://github.com/systems-cs-pub-ro/so-assignments/blob/master/2-stdio/util/so_stdio.h|so_stdio.h]]. În acest header găsiți semnăturile functiilor exportate de biblioteca generată de voi. | + | [[https://github.com/systems-cs-pub-ro/so/blob/master/assignments/2-stdio/util/so_stdio.h|so_stdio.h]]. În acest header găsiți semnăturile functiilor exportate de biblioteca generată de voi. |
===== SO_FILE ===== | ===== SO_FILE ===== | ||
Line 178: | Line 181: | ||
Lansează un proces nou, care va executa comanda specificată de parametrul ''command''. Ca implementare, se va executa ''sh -c command'', respectiv ''cmd /C command'', folosind un pipe pentru a redirecta intrarea standard/ieșirea standard a noului proces. Funcția întoarce o structură ''SO_FILE'' pe care apoi se pot face operațiile uzuale de citire/scriere, ca și cum ar fi un fișier obișnuit. | Lansează un proces nou, care va executa comanda specificată de parametrul ''command''. Ca implementare, se va executa ''sh -c command'', respectiv ''cmd /C command'', folosind un pipe pentru a redirecta intrarea standard/ieșirea standard a noului proces. Funcția întoarce o structură ''SO_FILE'' pe care apoi se pot face operațiile uzuale de citire/scriere, ca și cum ar fi un fișier obișnuit. | ||
+ | |||
+ | Dacă apelul ''fork''/''CreateProcess'' eșuează se va întoarce NULL. | ||
Valorile parametrului ''type'' pot fi: | Valorile parametrului ''type'' pot fi: | ||
Line 187: | Line 192: | ||
</code> | </code> | ||
- | Se apelează doar pentru fișierele deschise cu ''so_popen''. Așteaptă terminarea procesului lansat de ''so_popen'' și eliberează memoria ocupată de structura ''SO_FILE''. Întoarce codul de ieșire al procesului (cel obținut în urma apelului ''waitpid''/''GetExitCodeProcess''). | + | Se apelează doar pentru fișierele deschise cu ''so_popen''. Așteaptă terminarea procesului lansat de ''so_popen'' și eliberează memoria ocupată de structura ''SO_FILE''. Întoarce codul de ieșire al procesului (cel obținut în urma apelului ''waitpid''/''GetExitCodeProcess''). Dacă apelul ''waitpid''/''WaitForSingleObject'' eșuează, se va întoarce -1. |
===== Precizări/recomandări pentru implementare ===== | ===== Precizări/recomandări pentru implementare ===== | ||
Line 222: | Line 227: | ||
*Testele de la 2 încolo au nevoie și ca funcția ''so_fileno'' să fie implementată. | *Testele de la 2 încolo au nevoie și ca funcția ''so_fileno'' să fie implementată. | ||
*Din punctajul temei se vor scădea automat puncte pentru întârzieri și pentru warning-uri. La revizia temei, se poate scădea suplimentar pentru nerespectarea criteriilor scrise la secțiunea de [[so:teme:general#lista_depunctari | depunctări]] ale temelor. | *Din punctajul temei se vor scădea automat puncte pentru întârzieri și pentru warning-uri. La revizia temei, se poate scădea suplimentar pentru nerespectarea criteriilor scrise la secțiunea de [[so:teme:general#lista_depunctari | depunctări]] ale temelor. | ||
+ | *Pentru neverificarea valorilor de retur se vor șcadea 0.4 puncte. | ||
*În cazuri excepționale se poate scădea mai mult decât este menționat mai sus. | *În cazuri excepționale se poate scădea mai mult decât este menționat mai sus. | ||
Line 229: | Line 235: | ||
<note tip> | <note tip> | ||
- | Pentru a inspecta diferențele între output-ul bibliotecii voastre și fișierele de referință ale checker-ului setați ''DO_CLEANUP=no'' în scriptul [[https://github.com/systems-cs-pub-ro/so-assignments/blob/master/2-stdio/checker/_test/run_test.sh | run_test.sh]]. | + | Pentru a inspecta diferențele între output-ul bibliotecii voastre și fișierele de referință ale checker-ului setați ''DO_CLEANUP=no'' în scriptul run_test.sh pentru [[https://github.com/systems-cs-pub-ro/so/blob/master/assignments/2-stdio/checker-lin/_test/run_test.sh | Linux]] respectiv [[ https://github.com/systems-cs-pub-ro/so/blob/master/assignments/2-stdio/checker-win/_test/run_test.sh | Windows]]. |
</note> | </note> | ||
Line 244: | Line 250: | ||
Resurse: | Resurse: | ||
- | * Header-ul [[https://github.com/systems-cs-pub-ro/so-assignments/blob/master/2-stdio/util/so_stdio.h|so_stdio.h]] expus de biblioteca ''so_stdio''. | + | * Header-ul [[https://github.com/systems-cs-pub-ro/so/blob/master/assignments/2-stdio/util/so_stdio.h|so_stdio.h]] expus de biblioteca ''so_stdio''. |
Pagina de Upload: | Pagina de Upload: | ||
*[[https://elf.cs.pub.ro/vmchecker/ui | vmchecker]] | *[[https://elf.cs.pub.ro/vmchecker/ui | vmchecker]] | ||
- | |||
- | <note important> | ||
- | [[https://github.com/systems-cs-pub-ro/so-assignments|Repo-ul de pe Github]] conține și un script Bash care vă ajută să vă creați un repository privat pe instanța de [[https://gitlab.cs.pub.ro|Gitlab]] a facultății, unde aveți la dispoziție 5 repository-uri private utile pentru teme. Urmăriți indicațiile din README și de pe [[:so:teme:folosire-gitlab|wiki-ul SO]]. | ||
- | |||
- | În plus, responsabilii de teme se pot uita mai rapid pe [[https://gitlab.cs.pub.ro|Gitlab]] la temele voastre pentru a vă ajuta în cazul în care întâmpinați probleme/bug-uri. Este mai ușor să primiți suport în rezolvarea problemelor implementării voastre dacă le oferiți responsabililor de teme acces la codul sursă pe [[https://gitlab.cs.pub.ro|Gitlab]]. | ||
- | |||
- | **Dacă ați folosit [[https://gitlab.cs.pub.ro|Gitlab]] pentru realizarea temei, indicați în README link-ul către repository. Asigurați-vă că responsabilii de teme au drepturi de citire asupra repo-ului vostru**. | ||
- | |||
- | </note> | ||
===== Suport, întrebări și clarificări ===== | ===== Suport, întrebări și clarificări ===== | ||
- | Pentru întrebări sau nelămuriri legate de temă folosiți [[:so:info:lista-discutii|lista de discuții]] sau [[:so:info:documentatie#social_media|canalul de IRC]]. | + | Pentru întrebări sau nelămuriri legate de temă folosiți [[https://curs.upb.ro/2021/mod/forum/view.php?id=194420|forumul temei]]. |
<note important> | <note important> | ||
- | Orice intrebare pe mailing list e recomandat să aibă subiectul de forma ''[Tema2][Platforma] Titlul problemei''. Exemple de așa da: | + | Orice intrebare pe forum **trebuie** să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: "Nu merge X. De ce?" fără o descriere mai amănunțită vor primi un răspuns mai greu. Înainte să postați o întrebare pe forum citiți și celelalte întrebări(dacă există) pentru a vedea dacă întrebarea voastră a fost deja adresată sub o altă formă(în cazul în care răspunsul din partea echipei vine mai greu este mai rapid să căutați voi deja printre întrebările existente). |
- | + | ||
- | * [Tema2][Linux] Biblioteca nu se generează | + | |
- | * [Tema2][Windows] No makefile found | + | |
- | * [Tema2][General] Neclaritate enunt: Dimensiune buffer | + | |
- | + | ||
- | Exemple de așa nu: | + | |
- | + | ||
- | * Problema la tema 2 | + | |
- | * eroare tema 2 | + | |
- | * eroare la dimensiuni | + | |
- | Revedeți și secțiunea de [[:so:info:lista-discutii|guidelines pentru lista de discuții SO]] | + | **ATENȚIE** să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă. |
</note> | </note> | ||
+ | </hidden> |