Untitled

mail@pastecode.io avatar
unknown
plain_text
21 days ago
4.3 kB
5
Indexable
Never
Realizați o aplicație formată din următoarele trei componente, definite în continuare, care vor fi dispuse conform ierarhiei de mai jos:.
├──main.sh
├──programs
│             └──filetypeandsize.c
└──scripts
                └──listdir.sh

1. Să se scrie un program C, numit "filetypeandsize.c", conform specificației următoare: Programul va primi un argument în linia de comandă; în caz contrar se va termina cu codul de eroare 2. Programul va considera acel argument ca fiind un nume de fișier și va determina, folosind o funcție din API-ul POSIX, tipul de fișier, precum și lungimea în octeți a conținutului său. Dacă sunt erori la apelul acelei funcții, atunci programul își va încheia execuția cu codul de terminare 3. Altfel, programul va afișa pe ieșirea stdout, folosind o funcție din biblioteca stdio, un mesaj format din numele fișierului și numărul întreg reprezentând lungimea fișierului, separate prin caracterul ':', și terminat cu caracterul '\n'. Apoi programul își va încheia execuția cu codul de terminare 1, dacă tipul fișierului este director, respectiv cu codul de terminare 0, în caz contrar.

2. Să se scrie un script bash, numit "listdir.sh", conform specificației următoare: Scriptul va primi un argument în linia de comandă; în caz contrar se va termina cu codul de eroare 2. Scriptul va considera acel argument ca fiind un nume de fișier și va apela executabilul "filetypeandsize" (obținut prin compilarea sursei "filetypeandsize.c"), transmițându-i acestuia ca argument în linia de comandă, acel nume de fișier pe care l-a primit el în linia de comandă. Apoi scriptul va decide, pe baza codului de terminare a execuției programului "filetypeandsize", dacă numele de fișier primit este un director, iar în caz afirmativ va efectua următoarea procesare a conținutului acelui director: va parcurge, folosind o structură repetitivă, toate intrările directe din acel director și, pentru fiecare intrare, scriptul se va apela recursiv pe sine însuși, cu acea intrare ca parametru în linia de comandă. (Atenție: așadar, aici trebuie să implementați o recursie explicită!)

3. Să se scrie un alt script bash, numit "main.sh", conform specificației următoare: Scriptul va primi un argument în linia de comandă și va face următoarele verificări, în ordinea următoare: i) va verifica că în directorul în care se află "main.sh", există un subdirector numit "scripts" ce conține scriptul "listdir.sh" și că are permisiunea de execuție a acestuia, iar în caz negativ va afișa pe ieșirea stderr un mesaj de eroare adecvat și se va termina cu codul 1; ii) va verifica că în directorul în care se află "main.sh", există un subdirector numit "programs" ce conține programul "filetypeandsize.c" și că are permisiunea de citire a acestuia, iar în caz negativ va afișa pe ieșirea stderr un mesaj de eroare adecvat și se va termina cu codul 2; iii) va verifica că în același subdirector numit "programs" se mai află și un fișier numit "filetypeandsize" (executabilul obținut prin compilare din programul "filetypeandsize.c"), iar în caz negativ va apela compilatorul gcc pentru a-l produce și, doar dacă vor fi erori la compilare, va afișa pe ieșirea stderr un mesaj de eroare adecvat și se va termina cu codul 3; iv) va verifica dacă argumentul primit reprezintă un director existent și asupra căruia are permisiune de citire, iar în caz negativ va afișa pe ieșirea stderr un mesaj de eroare adecvat și se va termina cu codul 4. Apoi scriptul "main.sh" va invoca scriptul "listdir.sh", transmițându-i în linia de comandă, argumentul pe care l-a primit el în linia de comandă. Invocarea scriptului "listdir.sh" se va face printr-o comandă compusă de tip pipeline, care să proceseze outputul produs prin execuția scriptului "listdir.sh" în maniera următoare: se va înlocui caracterul separator ':' cu stringul "---" în perechile de forma "nume fișier:lungime", iar apoi se vor păstra, în outputul produs, doar liniile de text începând de la a 5-a linie și până la a 20-a linie, inclusiv. La finalul procesării pipeline-ului, scriptul "main.sh" se va termina cu codul de terminare 0.
Leave a Comment