---
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

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