---
# System prepended metadata

title: SYS2
tags: [cours, ' gaby', ' ing1', ' sys2']

---

---
tags: cours, gaby, sys2, ing1
author: Robin 'Pachichi' BOUCHER
date: 22/03/2019
title: SYS2
---

++Inode++:
un inode représente un fichier
on ne met pas le nom du fichier dans l'inode
on y met la taille

++Filesystem++:
on va monter un filesystem dans le /root avec ==mount()==
qqsoit le filesystem, ça s'utilise de la même façon

==V-tables== (or virtual tables) are how most C++ implementations do ==polymorphism==. For each concrete implementation of a class, there is a table of function pointers to all the virtual methods. A pointer to this table (called the virtual table) exists as a data member in all the objects. When one calls a virtual method, we lookup the object's v-table and call the appropriate derived class method.

```c
struct foo {
    struct foo_ops *ops;
};
struct foo_ops {
    int (*f)();
};

struct foo t;
t.ops = func;

struct file_operations;
/*
 * operations sur les fichiers:
 * open
 * read
 * write
 * stat (ou fstat)
 * mmap
 * sendfile
 * close
 * ioctl
 * release
 * 
 * check include/linux/fs.h
 */
```

virtual filesystem (VFS):
-> filesystem
-> namei (pour name inode), c'est cette partie là qui s'occupe de faire le caching
-> open => vfs_open
-> read => vfs_read
stat (ou fstat)


Factory (?)

read(fd, ++buf++, *82*) <- ++buf++ est une ++dentry \*++
variantes de read: pread && readv
Comment changer la sémantique de read() pour que ça ait du sens ?

*(début de parenthèses du cours*
```c
struct iovec {
    void *ptr;
    size_t len;
};
```
*reverse proxy
fin de parenthèses du cours)*

getdent
use sendfile to recreate cp (man sendfile) 

En C++, pour les functions qui ont `virtual`, on a besoin d'implémenter le destructeur.

Pour les shared_ptr -> ref_count pour éviter les types d'erreurs suivantes:
* `use after free`
* `leak memory`

les fichiers de ==devices==, y en a 2 types:
* char dev (devices) (utiliser pour faire des terminaux)
* block dev (devices) (comme char dev, mais uniquement pour des disques)

Major number -> quel est le driver associé au device ?
Minor number -> quelle est l'instance du device ?

