This shows you the differences between two versions of the page.
sde2:laboratoare:06_rust [2023/04/03 20:02] cristiana.andrei created |
sde2:laboratoare:06_rust [2023/04/11 08:14] (current) cristiana.andrei [Assignment] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== TP 06 - Signaux ====== | ====== TP 06 - Signaux ====== | ||
+ | ===== Assignment ===== | ||
+ | <note warning> | ||
+ | Vous devez **accepter** le assignment d'ici et travailler avec ce repository: [[https://classroom.github.com/a/qX8WGLxE|Lab6]] | ||
+ | </note> | ||
===== Objectifs ===== | ===== Objectifs ===== | ||
Le but de ce TP est d'apprendre à utiliser | Le but de ce TP est d'apprendre à utiliser | ||
- | * La pipe | + | * Les signaux |
- | * Utiliser les signaux | + | |
- | + | ||
- | + | ||
- | ===== Pipe ===== | + | |
- | Une **pipe** est une forme de //redirection// (transfert de la sortie standard vers une autre destination) qui est utilisée dans Linux et d'autres systèmes d'exploitation de type Unix pour envoyer la sortie d'une commande/programme/processus à une autre commande/programme/processus pour un traitement ultérieur . | + | |
- | + | ||
- | Pipe est utilisé pour combiner deux commandes ou plus, et dans ce cas, la sortie d'une commande agit comme entrée d'une autre commande, et la sortie de cette commande peut servir d'entrée pour la commande suivante et ainsi de suite. Il peut également être visualisé comme une connexion temporaire entre deux ou plusieurs commandes/programmes/processus. | + | |
- | + | ||
- | <note> | + | |
- | Exemple d'utilisation de pipes en Rust: [[https://doc.rust-lang.org/rust-by-example/std_misc/process/pipe.html|pipe]] | + | |
- | </note> | + | |
===== Signaux en Rust ===== | ===== Signaux en Rust ===== | ||
Line 111: | Line 103: | ||
===== Sujets ===== | ===== Sujets ===== | ||
- | - Écrivez un programme qui crée un tuyau et des bifurcations. Du parent, lisez à partir du clavier un message et envoyez-le par le canal à l'enfant. | + | - Compilez ex1. Exécutez-le et utilisez la commande shell kill pour lui envoyer des signaux. |
- | - Inversez le message dans l'enfant et envoyez-le au parent. | + | - Modifiez-le pour qu'à chaque fois qu'il reçoit un signal, il imprime une lettre différente : a - SIGHUP, b - SIGINT, n - SIQUIT, s - SIGTRAP, espace - SIGFPE. Écrivez un autre programme en Rust qui lui envoie des signaux pour qu'il imprime ''bannanas bannanas''. Le deuxième programme reçoit le pid de destination à partir d'un argument de ligne de commande. On utlise la fonction [[https://docs.rs/nix/latest/nix/sys/signal/fn.kill.html|kill]] pour envoyer un certain signal a un certain processus, en mentionant le PID et le type de signal: <code c> kill(Pid::from_raw(/*ici on met le pid*/), Signal::/*type de signal*/); </code> //Hint: Pour trouver le pid du processus ex1, utilisez la commande **top** dans le terminal. // |
- | - Clonez le repository [[https://github.com/UPB-FILS-SdE2/Solutions/tree/main|Solutions]] et compilez ex2. Exécutez-le et utilisez la commande shell kill pour lui envoyer des signaux. | + | |
- | - Modifiez-le pour qu'à chaque fois qu'il reçoit un signal, il imprime une lettre différente : a - SIGHUP, b - SIGINT, n - SIQUIT, s - SIGTRAP, espace - SIGFPE. Écrivez un autre programme en Rust qui lui envoie des signaux pour qu'il imprime ''bannanas bannanas''. Le deuxième programme reçoit le pid de destination à partir d'un argument de ligne de commande. | + | |
- Créez un programme qui fait fork et entre dans une boucle infinie (avec un sleep). Son enfant attend quelques secondes puis sort. Écrivez un message à l'écran lorsque l'enfant sort. Utilisez SIGCHLD. | - Créez un programme qui fait fork et entre dans une boucle infinie (avec un sleep). Son enfant attend quelques secondes puis sort. Écrivez un message à l'écran lorsque l'enfant sort. Utilisez SIGCHLD. | ||
+ | - Essayez de stocker une valeur dans un pointeur null. Lors de la réception du signal SIGSEGV, imprimez l'adresse où le défaut de segmentation s'est produit. | ||
+ | - Essayez de stocker une valeur dans un pointeur pour une constante. Maintenant, voyez ce qui se passe. | ||
- | ===== Solutions ===== | ||
- | [[https://github.com/UPB-FILS-SdE2/Solutions/tree/main/tp5|Solutions]] | ||