Differences

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

Link to this comparison view

sde2:laboratoare:03_rust [2023/03/19 22:40]
cristiana.andrei
sde2:laboratoare:03_rust [2023/03/20 23:45] (current)
cristiana.andrei
Line 1: Line 1:
 ====== TP 03 - Fichiers et descripterus de fichiers ====== ====== TP 03 - Fichiers et descripterus de fichiers ======
 +
 +===== Assignment =====
 +<note warning>
 +Vous devez **accepter** le assignment d'ici et travailler avec ce repository: [[https://​classroom.github.com/​a/​7L73IFBY|Lab3]]
 +</​note>​
  
 ===== Objectifs ===== ===== Objectifs =====
Line 6: Line 11:
   * Utiliser dup2  ​   * Utiliser dup2  ​
  
 +===== Linux Standard Streams =====
 +Sous Linux, ''​stdin''​ est le flux d'​entrée standard. Cela accepte le texte comme entrée. La sortie texte de la commande au shell est transmise via le flux ''​stdout''​ (sortie standard). Les messages d'​erreur de la commande sont envoyés via le flux ''​stderr''​ (erreur standard).
 +
 +Vous pouvez donc voir qu'il existe deux flux de sortie, ''​stdout''​ et ''​stderr'',​ et un flux d'​entrée,​ ''​stdin''​. Étant donné que les messages d'​erreur et la sortie normale ont chacun leur propre conduit pour les acheminer vers la fenêtre du terminal, ils peuvent être traités indépendamment les uns des autres.
 +
 +Les flux sous Linux, comme presque tout le reste, sont traités comme s'ils étaient des **fichiers**. Vous pouvez lire du texte à partir d'un fichier et vous pouvez écrire du texte dans un fichier. Ces deux actions impliquent un flux de données. Ainsi, le concept de traitement d'un flux de données en tant que fichier n'est pas si exagéré.
 +
 +<​note>​
 +Chaque fichier associé à un processus se voit attribuer un **numéro unique** pour l'​identifier. C'est ce qu'on appelle le **descripteur de fichier**. Chaque fois qu'une action doit être effectuée sur un fichier, le descripteur de fichier est utilisé pour identifier le fichier.
 +</​note>​
 +
 +Ces valeurs sont toujours utilisées pour ''​stdin'',​ ''​stdout''​ et ''​stderr''​ :​
 +  * 0: stdin
 +  * 1: stdout
 +  * 2: stderr
 ===== Les appels système dup et dup2 ===== ===== Les appels système dup et dup2 =====
  
Line 33: Line 53:
   - Lisez votre nom à partir du clavier en utilisant [[https://​doc.rust-lang.org/​std/​io/​fn.stdin.html|stdin]]. Imprimer le nom en utilisant ​ [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|stdout]].//​N'​utilisez pas le println!//   - Lisez votre nom à partir du clavier en utilisant [[https://​doc.rust-lang.org/​std/​io/​fn.stdin.html|stdin]]. Imprimer le nom en utilisant ​ [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|stdout]].//​N'​utilisez pas le println!//
   - Imprimer le contenu d'un fichier reçu en tant qu'​argument de ligne de commande sur [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|stdout]]. //​N'​utilisez pas le println!//   - Imprimer le contenu d'un fichier reçu en tant qu'​argument de ligne de commande sur [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|stdout]]. //​N'​utilisez pas le println!//
 +  - Lisez 3 chiffres sur le clavier en utilisant //stdin//. Écrivez le maximum de ces 3 nombres dans le fichier maximum.txt.
 +  - Copiez le contenu d'un fichier donné comme argument depuis la ligne de commande dans un fichier nommé copy.txt
 +  - Ouvrez 2 instances du même fichier (ouvrez le fichier 2 fois). Lisez 10 octets de chaque instance et imprimez-les. Ouvrez une nouvelle instance du fichier et utilisez **dup()** pour faire une copie du descripteur de fichier de cette nouvelle instance. Lisez à partir des deux descripteurs de fichiers et voyez les différences entre la première situation et celle-ci.
   - Écrivez la date d'​aujourd'​hui par **redirection** de stdout dans un fichier appelé output.txt en utilisant la fonction [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|write_all]].   - Écrivez la date d'​aujourd'​hui par **redirection** de stdout dans un fichier appelé output.txt en utilisant la fonction [[https://​doc.rust-lang.org/​std/​io/​fn.stdout.html|write_all]].
-  - Créer un programme de sorte que la contenu d'un fichier qui est recu comme premier argument soit **redirigée vers** un fichier reçu en tant que deuxième argument - une fonctionnalité similaire à l'​utilitaire [[https://​www.geeksforgeeks.org/​cp-command-linux-examples/​|cp]] de Linux. 
   - Lisez 5 noms de filles à partir du clavier en utilisant [[https://​doc.rust-lang.org/​std/​io/​fn.stdin.html|stdin]] et ecrivez-les dans un fichier appelee //​names.txt//​ en utilisant stdout. Executez encore une fois le programme et Lisez 5 noms de garçons à partir du clavier. Il faut **ajouter** les noms de garçons aux noms des filles deja existantes dans //​names.txt//,​ pas d'​écraser le fichier! //Hint: utilisez [[https://​doc.rust-lang.org/​std/​fs/​struct.OpenOptions.html|OpenOptions]] pour ajouter au fichier //   - Lisez 5 noms de filles à partir du clavier en utilisant [[https://​doc.rust-lang.org/​std/​io/​fn.stdin.html|stdin]] et ecrivez-les dans un fichier appelee //​names.txt//​ en utilisant stdout. Executez encore une fois le programme et Lisez 5 noms de garçons à partir du clavier. Il faut **ajouter** les noms de garçons aux noms des filles deja existantes dans //​names.txt//,​ pas d'​écraser le fichier! //Hint: utilisez [[https://​doc.rust-lang.org/​std/​fs/​struct.OpenOptions.html|OpenOptions]] pour ajouter au fichier //
sde2/laboratoare/03_rust.1679258426.txt.gz · Last modified: 2023/03/19 22:40 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