Table of Contents

TP 03 - Fichiers et descripterus de fichiers

Assignment

Vous devez accepter le assignment d'ici et travailler avec ce repository: Lab3

Objectifs

Le but de ce TP est d'apprendre à utiliser

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é.

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.

Ces valeurs sont toujours utilisées pour stdin, stdout et stderr :

Les appels système dup et dup2

dup

L'appel système dup() crée une copie d'un descripteur de fichier.

dup2

L'appel système dup2() est similaire à dup() mais la différence fondamentale entre eux est qu'au lieu d'utiliser le descripteur de fichier inutilisé portant le numéro le plus bas, il utilise le numéro de descripteur spécifié par l'utilisateur.

Lors de l'appel de dup2 dans Rust, les paramètres donnés doivent être l'ancien descripteur de fichier et le nouveau.

Redirections

Quand vous voulez rediriger stdout vers un fichier vous pouvez le faire en ouvrant un fichier à l'aide de l'appel système open(), puis en dupliquant ce descripteur de fichier sur stdout en utilisant dup2(), de sorte que la sortie standard soit maintenant représentée par le fichier ouvert et non par la console.

Bibliographie

Sujets

  1. Lisez votre nom à partir du clavier en utilisant stdin. Imprimer le nom en utilisant stdout.N'utilisez pas le println!
  2. Imprimer le contenu d'un fichier reçu en tant qu'argument de ligne de commande sur stdout. N'utilisez pas le println!
  3. Lisez 3 chiffres sur le clavier en utilisant stdin. Écrivez le maximum de ces 3 nombres dans le fichier maximum.txt.
  4. Copiez le contenu d'un fichier donné comme argument depuis la ligne de commande dans un fichier nommé copy.txt
  5. 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.
  6. Écrivez la date d'aujourd'hui par redirection de stdout dans un fichier appelé output.txt en utilisant la fonction write_all.
  7. Lisez 5 noms de filles à partir du clavier en utilisant 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 OpenOptions pour ajouter au fichier