--- title: SO Lista 4 tags: SO author: Mateusz Reis --- # SO LISTA 4 ## Zadanie 1 - Wywołania read i write nie działają na katalogach ponieważ format katalogu jest zaplanowany jako systemowe metadane i to system jest odpowiedzialny za zarządzanie nimi. Użytkownik może je tylko modyfikować. - **Rekord katalogu** - wpis w strukturze katalogu o strukturze [filename,inode] - do ich wyświetlenia służy readdir() - zawartość katalogu nie jest posortowana - **metadane katalogu** - dane wykorzystywane przez system takie jak: uprawnienia dostępu, numer inode czy liczba dowiązań - liczba dowiązań do '/' jest zależna od liczby podkatalogów (każdy katalog ma link do swojego rodzica) ~ aby to sprawdzić ll | grep -c dr - dowiązanie jest to rekord katalogu ~ do katalogu podobno nie można utworzyć hard-linków(może to wytworzyć nieskończoną pętle https://askubuntu.com/questions/210741/why-are-hard-links-not-allowed-for-directories) ## Zadanie 3 ![](https://i.imgur.com/UKg933O.png) 1. (0)sh - tworzy lub otwiera plik (creat() lub open()) 2. (0)sh - fork() 3. (0)sh - waitpid() 4. (1)sh - pipe() out dla ps oraz in dla grep 5. (1)sh - fork() 8. (1)sh - pipe() - out dla grep in dla wc 9. (1)sh - fork() 10. (1)sh - zmiana in na out grepa 11. (1)sh - dup2() - zmiana out na stworzony plik 12. (2)sh - dup2() - zamiania stdout na in dla grep 13. (2)sh - execve(ps -ef) 14. (3)sh - dup2() - zmiana in na out ps 15. (3)sh - dup(2) - zmiana out na in dla wc 16. (3)sh - execve(grep sh) 17. (1)sh - execve(wc -l) 18. (0)sh - close() ## Zadanie 5 - Wykonywanie instrukcji pomiędzy append() a open() może dać szansę na stworzenie oraz otworzenie pliku przez inny proces ponieważ open z O_CREAT nie sprawdza czy plik istnieje. Aby temu zapobiec powinniśmy użyć oprócz flag O_CREAT i O_WRONLY flagi O_EXCL, która zwraca błąd jeśli plik istnieje. W rezultacie nie zawiesimy się na próbie Unlink(). ```c #include "csapp.h" bool f_lock(char* path){ return Open(path,O_CREAT|O_EXCL|O_WRONLY, 700)>0;} void f_unlock(char* path){Unlink(path);} ``` - Zagrożenia wynikające z tego błędu to możliwość zawieszenia się programu oraz podatność na ataki(inny proces może podpiąć dowiązanie do pliku) ## Zadanie 6 - **Kursor** - aktualna pozycja w pliku ~ od niej zostanie wzowione wczytywanie/pisanie - **dowiązanie symboliczne** - plik, który wskazuje na inny plik/katalog