Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:laboratoare:05_rust [2023/04/03 21:44]
cristiana.andrei [Sujets]
sde2:laboratoare:05_rust [2023/04/04 06:21] (current)
cristiana.andrei [Objectifs]
Line 1: Line 1:
 ====== TP 05 - Communication Entre Processus ====== ====== TP 05 - Communication Entre Processus ======
 +
 +<note warning>
 +Vous devez **accepter** le assignment d'ici et travailler avec ce repository: [[https://​classroom.github.com/​a/​lhtkAUIt|Lab5]]
 +</​note>​
 +
  
 ===== Objectifs ===== ===== Objectifs =====
Line 8: Line 13:
 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 . 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 .
  
-Le canal est un mécanisme de communication à sens unique entre deux processus. Dans la plupart des implémentations UNIX, un canal apparaît comme une zone mémoire d'une certaine taille dans l'​espace du noyau. Les processus qui communiquent via un canal anonyme doivent avoir un certain degré de parenté; généralement,​ un processus qui crée un tuyau sera alors appelé une fourchette, et le tuyau sera utilisé pour la communication parent-enfant. Dans tous les cas, les processus qui communiquent via des canaux anonymes ne peuvent pas être créés par différents utilisateurs du système.+Le canal est un mécanisme de communication à sens unique entre deux processus. Dans la plupart des implémentations UNIX, un canal apparaît comme une zone mémoire d'une certaine taille dans l'​espace du noyau. Les processus qui communiquent via un canal anonyme doivent avoir un certain degré de parenté; généralement,​ un processus qui crée un pipe sera alors appelé une fork, et le pipe sera utilisé pour la communication parent-enfant. Dans tous les cas, les processus qui communiquent via des canaux anonymes ne peuvent pas être créés par différents utilisateurs du système.
  
 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. 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.
Line 36: Line 41:
   * la lecture / écriture depuis / vers les pipes se fait à l'aide des fonctions ''​ stdin().read_line() ''​ / ''​ stdout().write () ''​. ​   * la lecture / écriture depuis / vers les pipes se fait à l'aide des fonctions ''​ stdin().read_line() ''​ / ''​ stdout().write () ''​. ​
  
-La plupart des applications qui utilisent des tuyaux ​ferment dans chacun des processus l'​extrémité du tuyau ** inutilisé ** en communication unidirectionnelle. Si l'un des descripteurs est fermé, les règles s'​appliquent:​+La plupart des applications qui utilisent des pipes ferment dans chacun des processus l'​extrémité du pipe ** inutilisé ** en communication unidirectionnelle. Si l'un des descripteurs est fermé, les règles s'​appliquent:​
   * une lecture à partir d'un canal pour lequel le ** descripteur d'​écriture ** a été fermé, après que toutes les données ont été lues, renverra ''​ 0 '',​ indiquant la fin du fichier. Le descripteur d'​écriture peut être dupliqué afin que plusieurs processus puissent écrire dans le canal. Habituellement,​ dans le cas des canaux anonymes, il n'y a que deux processus, l'un qui écrit et l'​autre qui lit, tandis que dans le cas des fichiers de canal nommé (FIFO), il peut y avoir plusieurs processus qui écrivent des données.   * une lecture à partir d'un canal pour lequel le ** descripteur d'​écriture ** a été fermé, après que toutes les données ont été lues, renverra ''​ 0 '',​ indiquant la fin du fichier. Le descripteur d'​écriture peut être dupliqué afin que plusieurs processus puissent écrire dans le canal. Habituellement,​ dans le cas des canaux anonymes, il n'y a que deux processus, l'un qui écrit et l'​autre qui lit, tandis que dans le cas des fichiers de canal nommé (FIFO), il peut y avoir plusieurs processus qui écrivent des données.
   * une écriture dans un tube pour lequel le descripteur ** read ** a été fermé provoque la génération du signal ''​ SIGPIPE ''​. Si le signal est capturé et revient de la routine de traitement, la fonction système ''​ écriture ''​ renvoie une erreur et la variable ''​ errno ''​ a la valeur ''​ EPIPE ''​.   * une écriture dans un tube pour lequel le descripteur ** read ** a été fermé provoque la génération du signal ''​ SIGPIPE ''​. Si le signal est capturé et revient de la routine de traitement, la fonction système ''​ écriture ''​ renvoie une erreur et la variable ''​ errno ''​ a la valeur ''​ EPIPE ''​.
-<note important>​ L'​erreur ** la plus courante **, lorsque vous travaillez avec des tuyaux, vient de la négligence du fait que ''​EOF''​ n'est pas envoyé à travers les tuyaux ​(la lecture des tuyaux ​ne se termine pas) à moins que toutes les ** extrémités ne soient fermées**. ** TOUS ** les processus qui ont ouvert le descripteur de tuyau (dans le cas d'​une ​fourche, assurez-vous de fermer les extrémités du tuyau dans le processus parent).</​note>​+<note important>​ L'​erreur ** la plus courante **, lorsque vous travaillez avec des pipes, vient de la négligence du fait que ''​EOF''​ n'est pas envoyé à travers les pipes (la lecture des pipes ne se termine pas) à moins que toutes les ** extrémités ne soient fermées**. ** TOUS ** les processus qui ont ouvert le descripteur de pipe (dans le cas d'​une ​fork, assurez-vous de fermer les extrémités du pipe dans le processus parent).</​note>​
 ===== Sugestions ===== ===== Sugestions =====
  
Line 63: Line 68:
  
 ===== Sujets ===== ===== Sujets =====
-  - Écrivez un programme qui crée un pipe et processus (un processus parent et un processus enfant en utlisant [[https://​docs.rs/​nix/​0.23.1/​nix/​unistd/​fn.fork.html|fork]]). Du parent, lisez à partir du clavier un message et envoyez-le par le canal à l'​enfant.+  - Écrivez un programme qui crée un pipe et un processus (processus enfant en utlisant [[https://​docs.rs/​nix/​0.26.2/​nix/​unistd/​fn.fork.html|fork]]). Du parent, lisez à partir du clavier un message et envoyez-le par le canal à l'​enfant.
     - Inversez le message dans l'​enfant et envoyez-le au parent.     - Inversez le message dans l'​enfant et envoyez-le au parent.
-  - Écrivez un programme qui crée un pipe et processus (un processus parent et un processus enfant en utlisant [[https://​docs.rs/​nix/​0.23.1/​nix/​unistd/​fn.fork.html|fork]]). ​Du parent, lisez à partir du clavier 2 numéros ​et envoyez-les par le canal à l'​enfantL'​enfant fait la somme entre ces 2 nombres et affiche le resultat. +  - Écrivez un programme qui crée un pipe et un processus (un processus enfant en utlisant [[https://​docs.rs/​nix/​0.26.1/​nix/​unistd/​fn.fork.html|fork]]). ​Le processus enfant redirige son ecran vers le pipe et exécute ls -l. Le processus parent ​lit la sortie de l'enfant à partir du pipe et l'affiche
-  - Écrivez un programme qui crée un pipe et 2 processus (un processus parent ​et un processus ​enfant ​en utlisant [[https://​docs.rs/​nix/​0.23.1/​nix/​unistd/​fn.fork.html|fork]]). Du parent, lisez à partir du clavier un message ​et envoyez-les par le canal à l'enfant. L'​enfant doit compter toutes les voyelles et renvoyer ce nombre au parent+  - Écrivez un programme qui crée un pipe et 2 processus (deux processus enfant en utlisant [[https://​docs.rs/​nix/​0.26.1/​nix/​unistd/​fn.fork.html|fork]] ​doix fois). Le premier enfant exécute ls -l et le deuxième ​enfant ​exécute grep srcLe parent ​connecte ​l'affichage du premier enfant au clavier du deuxième enfant avec un pipe
-  - Écrivez un programme qui crée un pipe et 2 processus (un processus parent et un processus enfant en utlisant [[https://​docs.rs/​nix/​0.23.1/​nix/​unistd/​fn.fork.html|fork]]). ​Du parent, lisez à partir du clavier 2 numéros ​et envoyez-les par le canal à l'enfant. ​L'​enfant fait la division entre ces 2 nombres et renvoye le resultat vers le parent ​qui doit l'ecrire dans un fichier//​N'​oubliez pas de gerer le cas de division par 0!// +  
sde2/laboratoare/05_rust.1680547464.txt.gz · Last modified: 2023/04/03 21:44 by cristiana.andrei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0