---
# System prepended metadata

title: Lista 4
tags: [SO]

---

# Lista 4
###### tags: `SO`

## Zadanie 1


## Zadanie 2

**Działanie programu `scipt`**
`script` zapisuje cały input i output sesji terminala. Robi to ustawiając się między terminalem a nowym wywołaniem powłoki. Nie zostaną zapisane hasła, ponieważ nie są one `echo`-wane.


**ICRNL** tłumaczy powrót karetki na znak nowej linii (CR -> NL)
**ONLCR** tłumaczy znak nowej linii na znak powrotu karetki i nowej linii (NL -> CRNL)

## Zadanie 3



## Zadanie 4



## Zadanie 5

**Czemu nie można czytać i modyfikować katalogów przy pomocy wywołań read(2) i write(2)?**
Katalog jest jedynym typem pliku, który zawiera listę rekordów. W związku z tym odyczy i zapisy na nim w postaci bajtów mogą nie być do końca dobrym pomysłem.

**Jakim wywołaniem systemowym można wczytać rekord katalogu (ang. directory entry )?**
`readdir(directory)`

**Dlaczego zawartość
katalogu nie jest posortowana?**
System plików porządkuje zawartość tak, jak mu wygodnie.

![](https://i.imgur.com/Y2gNMQ6.png)

![](https://i.imgur.com/TTWc4Z4.png)

**Wyświetl metadane katalogu głównego «/» przy pomocy polecenia «stat»,
a następnie wyjaśnij z czego wynika podana liczba dowiązań (ang. hard link)?**
Istnieje jedno dowiązanie na samego siebie i po jednym dowiązaniu dla każdego z podkatalogów.

![](https://i.imgur.com/QK9qlTu.png)


## Zadanie 6

```c=
#include "csapp.h"

bool f_lock(const char *path) {
    return (void)Open(path, O_CREAT|O_WRONLY|O_EXLOCK, 0700) >= 0);
}

void f_unlock(const char *path) {
    Unlink(path);
}
```


## Zadanie 7

```c=
  for (int i = max_fd; i > 2; i--){
      char buf[250];
      char filePath[PATH_MAX];
      if(fcntl(i, F_GETPATH, filePath) != -1 && i != out) {
          printf("FD: %d   %s\n", i, filePath);
          off_t t = lseek(i, 0, SEEK_SET);
          read(i,&buf,255);
          printf("Test: %s\n", buf);
      }
  }
```


![](https://i.imgur.com/aMjWLV9.png)


## Zadanie 8
```c=
#include "csapp.h"
 
int main() {
    struct stat *buf = malloc(sizeof(struct stat));
    stat("./holes.bin", buf);
    printf("st_blksize: %d\n", buf->st_blksize); /* Block size for filesystem I/O */
    printf("st_stblocks: %d\n", buf->st_blocks); /* Number of 512B blocks allocated */
    printf("st_size: %d\n", buf->st_size); /* Total size, in bytes */
    printf("cl_size: %d\n", buf->st_blksize * buf->st_blocks);
}
```
Dzięki dziurom.
