This shows you the differences between two versions of the page.
so:teme:tema-asist [2013/02/19 09:31] larisa.grigore |
so:teme:tema-asist [2016/03/13 12:21] (current) razvan.deaconescu |
||
---|---|---|---|
Line 7: | Line 7: | ||
* Care este nivelul așteptat al soluțiilor temelor? | * Care este nivelul așteptat al soluțiilor temelor? | ||
* Cum arată o temă de 100p la SO? | * Cum arată o temă de 100p la SO? | ||
- | ** Exemple de cod bine scris - programming techniques & coding style | + | * Exemple de cod bine scris - programming techniques & coding style |
- | ** Makefile | + | * Makefile |
- | ** README | + | * README |
Line 17: | Line 17: | ||
===== Precizări generale ===== | ===== Precizări generale ===== | ||
- | *Programul se rulează astfel | + | * Programul se rulează astfel |
- | ***$ ./guardian nume_program param1 param2 ...** | + | * **$ ./guardian nume_program param1 param2 ...** |
- | *nume_program se va căuta în directoarele din $PATH și în directorul curent | + | * nume_program se va căuta în directoarele din %%$%%PATH și în directorul curent |
- | *Guardianul va salva ieșirile procesului protejat, nume_program, în ./nume_program.stdout și ./nume_program.stderr | + | * Guardianul va salva ieșirile procesului protejat, nume_program, în ./nume_program.stdout și ./nume_program.stderr |
- | *./guardian ls | + | * ./guardian ls |
- | *ls.stdout | + | * ls.stdout |
- | *ls.stderr | + | * ls.stderr |
- | *O singură instanță de guardian poate rula, la un moment dat, pe un sistem | + | * O singură instanță de guardian poate rula, la un moment dat, pe un sistem |
- | *./guardian sleep 100 | + | * ./guardian sleep 100 |
- | *./guardian pwd -- semnalează eroare | + | * ./guardian pwd -- semnalează eroare |
- | *Interacțiunea utilizatorului cu aplicația se va face cu semnale, pe GNU/Linux, și evenimente, pe Windows | + | * Interacțiunea utilizatorului cu aplicația se va face cu semnale, pe GNU/Linux, și evenimente, pe Windows |
- | ***Semnalele au frecvenţă suficient de mică încăt să poată fi tratate pe măsură ce apar** | + | * **Semnalele au frecvenţă suficient de mică încăt să poată fi tratate pe măsură ce apar** |
- | *Operația de repornire constă în oprirea și pornirea procesului copil, cu argumentele anterioare | + | * Operația de repornire constă în oprirea și pornirea procesului copil, cu argumentele anterioare |
- | *Oprirea constă în terminarea, posibil bruscă, a execuției programului copil | + | * Oprirea constă în terminarea, posibil bruscă, a execuției programului copil |
- | *Pentru oprire se poate trimite orice semnal de genul: SIGSTOP, SIGTERM sau SIGKILL | + | * Pentru oprire se poate trimite orice semnal de genul: SIGSTOP, SIGTERM sau SIGKILL |
- | *man 7 signal: "The signals **SIGKILL** and **SIGSTOP** cannot be caught, blocked, or ignored." | + | * man 7 signal: "The signals **SIGKILL** and **SIGSTOP** cannot be caught, blocked, or ignored." |
===== Precizări GNU/Linux ===== | ===== Precizări GNU/Linux ===== | ||
Line 38: | Line 38: | ||
Guardian Process-ul va intercepta următoarele semnale | Guardian Process-ul va intercepta următoarele semnale | ||
- | *SIGCONT - repornește procesul copil | + | * SIGCONT - repornește procesul copil |
- | *SIGINT - oprește procesul copil și se închide | + | * SIGINT - oprește procesul copil și se închide |
- | *Restul semnalelor se pot ignora | + | * Restul semnalelor se pot ignora |
- | *__Dacă ignorați SIGCHLD atunci s-ar putea să nu știți când copilul reusește să execute comanda și când nu__ | + | * __Dacă ignorați SIGCHLD atunci s-ar putea să nu știți când copilul reusește să execute comanda și când nu__ |
Pentru a simplifica implementarea, puteți presupune că procesul copil nu va ieși decât cu codul 0 | Pentru a simplifica implementarea, puteți presupune că procesul copil nu va ieși decât cu codul 0 | ||
- | *Este "valid": **exit(EXIT_FAILURE);** | + | * Este "valid": **exit(EXIT_FAILURE);** |
- | *În realitate nu este corect, soluția lui LG este completă | + | * În realitate nu este corect, soluția lui LG este completă |
- | *Dacă copilul nu reusește execuția programului dat ca parametru, atunci trimite un octet pe PIPE-ul cu părintele | + | * Dacă copilul nu reusește execuția programului dat ca parametru, atunci trimite un octet pe PIPE-ul cu părintele |
- | *Dacă parintele reusește să citească octetul, atunci programul copil nu există | + | * Dacă parintele reusește să citească octetul, atunci programul copil nu există |
===== Precizări Windows ===== | ===== Precizări Windows ===== | ||
- | **Poate rula sub formă de serviciu Windows** (nu este obligatoriu) | + | * **Poate rula sub formă de serviciu Windows** (nu este obligatoriu) |
- | *Windows Service este un concept ce ține de Windows programming, nu de OS programming | + | * Windows Service este un concept ce ține de Windows programming, nu de OS programming |
Guardian Process-ul va intercepta următoarele evenimente | Guardian Process-ul va intercepta următoarele evenimente | ||
- | *CTRL_BREAK_EVENT - repornește procesul copil | + | * CTRL_BREAK_EVENT - repornește procesul copil |
- | *CTRL_C_EVENT - oprește procesul copil și se închide | + | * CTRL_C_EVENT - oprește procesul copil și se închide |
- | *Restul evenimentelor se pot ignora | + | * Restul evenimentelor se pot ignora |
Line 62: | Line 62: | ||
===== Întrebări ===== | ===== Întrebări ===== | ||
- | # Ce afișăm dacă un guardian deja rulează ?<code> | + | - Ce afișăm dacă un guardian deja rulează ?<code> |
fprintf(stderr, "Guardian is already running\n"); | fprintf(stderr, "Guardian is already running\n"); | ||
</code> | </code> | ||
- | # Ce afișăm dacă guardianul este rulat fără parametri în linia de comandă?<code> | + | - Ce afișăm dacă guardianul este rulat fără parametri în linia de comandă?<code> |
fprintf(stderr, "Usage: nume_program arg1 arg2 ...\n"); | fprintf(stderr, "Usage: nume_program arg1 arg2 ...\n"); | ||
</code> | </code> | ||
- | # Ce afisam daca guardianul nu gaseste programul copil?<code> | + | - Ce afisam daca guardianul nu gaseste programul copil?<code> |
fprintf(stderr, "The child program does not exist!\n"); | fprintf(stderr, "The child program does not exist!\n"); | ||
</code> | </code> | ||
- | # Se pot aplica redirectări pe programul copil? | + | - Se pot aplica redirectări pe programul copil? |
- | #* Nu. Redirectările (>, 2> , &>) sunt ilegale | + | * Nu. Redirectările (>, 2> , &>) sunt ilegale |
- | # Ce se întâmplă cu intrarea standard a procesului copil? | + | - Ce se întâmplă cu intrarea standard a procesului copil? |
- | #* Se redirectează din /dev/null | + | * Se redirectează din /dev/null |
- | # In ce mod deschidem fisierele pentru redirectarea procesului copil? | + | - In ce mod deschidem fisierele pentru redirectarea procesului copil? |
- | #* In modul append | + | * In modul append |
- | # Ce se intampla daca numele programului exista ca fisier pe disc, dar nu este executabil? | + | - Ce se intampla daca numele programului exista ca fisier pe disc, dar nu este executabil? |
- | #* Daca apelul functiei din familia exec va esua, atunci raportati ca nu exista fisierul respectiv | + | * Daca apelul functiei din familia exec va esua, atunci raportati ca nu exista fisierul respectiv |
- | # Când guardianul oprește procesul copil, trebuie să oprească și copii acestuia? | + | - Când guardianul oprește procesul copil, trebuie să oprească și copii acestuia? |
- | #* Nu. Procesul copil nu va face spawn la alți copii | + | * Nu. Procesul copil nu va face spawn la alți copii |
- | # Dacă utilizatorul rulează /bin/ls, unde se fac fişierele de log? În calea din care a fost pornit guardianul sau în /bin? | + | - Dacă utilizatorul rulează /bin/ls, unde se fac fişierele de log? În calea din care a fost pornit guardianul sau în /bin? |
- | #* În calea din care a fost pornit guardianul | + | * În calea din care a fost pornit guardianul |
- | # Care este ordinea în care căutăm? Întâi în $PATH, sau întâi în directorul curent? | + | - Care este ordinea în care căutăm? Întâi în %%$%%PATH, sau întâi în directorul curent? |
- | #* Ordinea în care guardianul se "uită" este stabilită de variabila $PATH; directorul curent se adaugă la sfârșitul șirului de directoare din $PATH | + | * Ordinea în care guardianul se "uită" este stabilită de variabila %%$%%PATH; directorul curent se adaugă la sfârșitul șirului de directoare din %%$%%PATH |
- | # Programul care este instrumetat va moşteni variabilele de mediu? | + | - Programul care este instrumetat va moşteni variabilele de mediu? |
- | #* Da, va moșteni variabilele de mediu | + | * Da, va moșteni variabilele de mediu |
- | # La restart, fişierele de logare vor fi trunchiate? | + | - La restart, fişierele de logare vor fi trunchiate? |
- | #* Nu. Se vor deschide cu append; checkerul va șterge fișierele stdout și stderr dintr-o sesiune | + | * Nu. Se vor deschide cu append; checkerul va șterge fișierele stdout și stderr dintr-o sesiune |
- | # Este recomandat să nu tratăm SIGSEGV și alte semnale? | + | - Este recomandat să nu tratăm SIGSEGV și alte semnale? |
- | #* **NU**, într-o aplicație reală aceste semnale trebuiesc tratate pentru că reprezintă o modalitate simplă de reparare a erorilor din codul vostru. Scopul temei nu este să ajungă o aplicație reală, ci una ușor de înțeles și care poate fi luată drept model de rezolvare pentru temele de casă | + | * **NU**, într-o aplicație reală aceste semnale trebuiesc tratate pentru că reprezintă o modalitate simplă de reparare a erorilor din codul vostru. Scopul temei nu este să ajungă o aplicație reală, ci una ușor de înțeles și care poate fi luată drept model de rezolvare pentru teme. |
===== Rezolvare ===== | ===== Rezolvare ===== | ||
Line 98: | Line 98: | ||
===== Testare ===== | ===== Testare ===== | ||
*6 teste publice | *6 teste publice | ||
- | *Pagina de descriere a [[teme/tema-asist/teste|testelor]] | + | *Pagina de descriere a [[:so:teme/tema-asist/teste|testelor]] |
===== Status ===== | ===== Status ===== | ||
Line 122: | Line 122: | ||
===== Comentarii ===== | ===== Comentarii ===== | ||
- | [[teme/tema-asist/comentarii|Comentarii legate de Tema Asist]] | + | [[:so:teme/tema-asist/comentarii|Comentarii legate de Tema Asist]] |
~~DISCUSSION~~ | ~~DISCUSSION~~ |