This shows you the differences between two versions of the page.
sde2:laboratoare:05_new [2022/03/28 16:43] alexandru.radovici created |
sde2:laboratoare:05_new [2022/04/12 00:25] (current) alexandru.radovici |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== TP 04 - Systems de fichiers ====== | + | ====== TP 04 - Processus ====== |
===== Objectifs ===== | ===== Objectifs ===== | ||
Line 7: | Line 7: | ||
* Utiliser dup2 | * Utiliser dup2 | ||
* Utiliser fork et exec | * Utiliser fork et exec | ||
+ | |||
===== Bibliographie ===== | ===== Bibliographie ===== | ||
* Understanding ownership [[https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html|en]], [[https://jimskapt.github.io/rust-book-fr/ch04-00-understanding-ownership.html|fr]]- | * Understanding ownership [[https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html|en]], [[https://jimskapt.github.io/rust-book-fr/ch04-00-understanding-ownership.html|fr]]- | ||
* Using Box<T> to Point to Data on the Heap [[https://doc.rust-lang.org/book/ch15-01-box.html|en]], [[https://jimskapt.github.io/rust-book-fr/ch15-01-box.html|fr]] | * Using Box<T> to Point to Data on the Heap [[https://doc.rust-lang.org/book/ch15-01-box.html|en]], [[https://jimskapt.github.io/rust-book-fr/ch15-01-box.html|fr]] | ||
- | * std::fs functions [[https://doc.rust-lang.org/stable/std/fs/index.html]] | + | * fork [[https://docs.rs/nix/0.23.1/nix/unistd/fn.fork.html]] |
- | * File [[https://doc.rust-lang.org/stable/std/fs/struct.File.html]] | + | * Unix functions [[https://docs.rs/nix/0.23.1/nix/unistd/index.html]] |
- | * Metadata [[https://doc.rust-lang.org/stable/std/fs/struct.Metadata.html]] | + | |
- | * MetadataExt [[https://doc.rust-lang.org/stable/std/fs/struct.Metadata.html#impl-MetadataExt]] | + | ===== Sugestions ===== |
- | * Permissions [[https://doc.rust-lang.org/stable/std/fs/struct.Permissions.html]] | + | <note> |
- | * PermissionsExt [[https://doc.rust-lang.org/stable/std/os/unix/fs/trait.PermissionsExt.html]] | + | Transformer un String en CString peut être fait en utilisant |
- | * Linux permissions [[https://en.wikipedia.org/wiki/Chmod]] | + | |
+ | <code rust> | ||
+ | CString::new("ls").unwrap() | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | <code rust> | ||
+ | // utilisé pour trouver le descripteur de fichier | ||
+ | use std::os::unix::io::AsRawFd; | ||
+ | </code> | ||
+ | </note> | ||
===== Sujets ===== | ===== Sujets ===== | ||
- | | + | - Écrivez un programme qui alloue dynamiquement un String à l'aide de Box. Lisez un texte au clavier et ajoutez-le aux String allouée. Imprimez le String. |
+ | - Créez un programme qui utilise fork pour créer un processus enfant. | ||
+ | - dans le processus parent, imprimez son PID (des parents) et le PID de l'enfant. Dans le processus enfant, imprimez le PID du parent et son PID. | ||
+ | - Dans le processus enfant, attendez quelques secondes et imprimez ensuite un message. | ||
+ | - Dans le processus parent, affichez "En attente de la sortie du processus enfant", attendez qu'il se termine (waitpid) et imprimez un message avant de quitter. | ||
+ | - Dans le processus enfant, exécutez la commande "ls -l". Utilisez execvp. Le premier argument doit être identique à la commande. | ||
+ | - Redirigez la sortie du processus enfant (fd 1) vers un fichier appelé output.txt. Ouvrez le fichier en écriture et utilisez dup2. | ||
+ | - N'écrasez pas le fichier output.txt, ajoutez-y des données (fs :: OpenOptions) |