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