Differences

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

Link to this comparison view

sde2:teme:tema_fr_2_rust [2022/03/12 13:45]
alexandru.radovici created
sde2:teme:tema_fr_2_rust [2023/03/31 11:41] (current)
alexandru.radovici
Line 1: Line 1:
-====== Devoir 2 - Rusty busybox ​======+====== Devoir 2 - Rustyshell ​====== 
 + 
 +Le but de ce thème est de créer un shell simple, compatible avec ''​ sh '';​
  
 ===== Informations générales ===== ===== Informations générales =====
  
 <note important>​ <note important>​
-Date limite: **15 Mars23:55**\\ +Date limite: ** Le 16 avril23h59 ** \\ 
-Points: **1 point** de la note finale\\ +Note: ** 2 points ​** de la note \\ 
-Téléchargement du devoir: [[https://vmchecker.cs.pub.ro|vmchecker.cs.pub.ro]]\\+Lien: [[https://classroom.github.com/​a/​5bIEjznY|Devoir 2]] \\
 Télécharger en retard: **1 points / jour** (maximum 4 jours)\\ Télécharger en retard: **1 points / jour** (maximum 4 jours)\\
 </​note>​ </​note>​
  
 +===== Connaissances précieuses =====
  
-===== Connaissances évaluées ===== +  * Utiliser les fonctions de la biblioteques //std// et //nix// pour travailler avec des fichiers 
- +  * Utiliser ​les fonctions de la biblioteques //nix// pour travailler avec des processus (''​fork'',​ ''​exec''​ et ''​waitpid''​ , ...) 
-  * Utiliser ​le langage Rust +  * Comprendre ​les principes ​de travail avec les fichiers et les processus
-  * Comprendre ​le mode de fonctionnement de la ligne de commande+
  
 ===== Règles ===== ===== Règles =====
  
-  - Le devoir doit contenir un fichier ​nommé //Readme.md// avec des explications concernant la manière choisie pour résoudre ​le devoir (-0.1p) +  - Le devoir doit contenir un fichier Readme ​expliquant comment vous avez créé ​le devoir (-0.1p) 
-  - Le devoir doit être implémenté en Rust et seulement ​en utilisant des fonctions de la bibliothèque standard RustToute autre implémentation conduira à l'​annulation du devoir.(**0 points**)+  - Vous pouvez utiliser ​seulement ​les fonctions de lea biblioteques //std// et //nix//. 
 +  - Un devoir ​qui passe tous les tests automatisés obtiendra 10 sur 10 si vouz ne trichez pas en utilisant un API interdit. 
  
-===== Copiage ​=====+===== Copier ​=====
  
-Le devoir ​est individuel. Toute tentative de copier ​entraînera ** 0p ** pour les devoirsOn utilisera un système automatisé pour détecter le copiage. Si on a des doutes, ​on va vous adresser ​des questions supplémentaires concernant le devoir. ​+Le devoir ​doit etre résolu individuellement. Toute tentative de tricher ​entraînera ** 0p ** pour ce devoirNous utiliserons également des systèmes de détection de trichage automatique. Si nous avons des doutes, ​nous vous poserons ​des questions supplémentaires concernant le devoir.
  
 ===== Questions ===== ===== Questions =====
Line 35: Line 39:
 Si vous voulez recevoir un e-mail lorsque des problèmes sont signalés ou lorsqu'​il y a de nouveaux messages, accédez au site github [[https://​github.com/​UPB-FILS-SdE2/​questions|repository]] et cliquez sur //Watch//. Si vous voulez recevoir un e-mail lorsque des problèmes sont signalés ou lorsqu'​il y a de nouveaux messages, accédez au site github [[https://​github.com/​UPB-FILS-SdE2/​questions|repository]] et cliquez sur //Watch//.
  
 +===== Rusty Shell =====
  
-===== Rusty busybox =====+Implémentez un shell simple qui prend en charge l'​exécution de commandes externes avec plusieurs arguments, commandes internes, redirections,​ canaux. Le shell doit gérer l'​exécution de commandes composées avec plusieurs opérateurs.
  
-Le but de ce devoir est d’implémenter un utilitaire capable d'​exécuter des commandes ​de type Linux bash. +<​note>​ 
- +Commandes internes: ​commandes ​que le shell exécute: ''​ cd ''​, '' ​pwd ''​''​ exit '' ​...
-Pour résoudre ​le devoirvous allez réaliser un program en Rust qui reçoit comme arguments la commande qu'on désire d'exécutersuivie par ses paramètresLe program exécutera la commande et après il finira son exécution. +
- +
-**Exemple:​** +
- +
-<code bash> +
-./​rusty-busybox cp file folder +
-</​code>​ +
- +
-===== Commandes acceptées ===== +
- +
-En ce qui suit, on va définir les commandes supportées par l'​utilitaire,​ ainsi que le comportement caractéristique et les parametres acceptés. Pour toute autre commande ou pour un format différent, le program va afficher le message **Invalid command** et il va retourner la valeur **-1**.+
  
-<note info> +Commandes externes: Les commandes qui sont en fait des exécutables séparés: ''​ ls '',​ '' vim ''​, '' arbre ''​''​ nano '',​ ...
-En raison d'incompatibilités entre le système Linux et d'autres systèmesle code d'erreur renvoyé affiché par le terminal Linux sera égal à 255pas -1. Si le terminal affiche 255 comme code d'erreurla solution est correcte.+
  
-Cela se produira également avec les codes d'​erreur spécifiés ci-dessouspour chacun d'eux, le terminal affichera un nombre positif.+La règle est la suivante: vérifiez si la commande interne estsinon, on suppose qu'elle est une commande externe.
 </​note>​ </​note>​
-Si la commande reçue par l'​utilitaire a été exécutée sans erreur, le program va retourner la valeur 0. Si non, il va retourner un code d'​erreur spécifique,​ mentionné dans la description de la commande. 
  
-<​note>​ +Le shell doit prendre en charge ​les opérateurs d'exécution suivants:
-Pour vous aider à comprendre le mode fonctionnement de chaque commande, on a attaché la page de mannuel de celle-ci. On de demande pas l'​implémentation de tous les parametres précisés dans le manuel, mais seulement de ceux qui seront précisés dans l'énoncé du devoir. ​+
  
-Les parametres qui ont la forme [param] sont optionnels+  * Opérateur de séquençage '';​ ''​ 
-</note>+    * sera utilisé pour exécuter des commandes séquentiellement;​ 
 +    * par exemple, ''​ expr1; expr2 ''​ commencera par exécuter les commandes ''​ expr1 ''​ et les commandes ''​ expr2 ''​ seulement après l'​exécution de //​expr1//;​ 
 +<​hidden>​ 
 +  * Opérateur de parallélisme ''​ & ''​ 
 +    * sera utilisé pour exécuter les commandes en parallèle;​ 
 +    * par exemple, ''​ expr1 & expr2 ''​ entraînera l'​exécution de ''​ expr1 ''​ et des commandes ''​ expr2 ''​ en parallèle;​ 
 +    * dans l'​implémentation de votre programme, il est ** INTERDIT** de rappeler le propre exécutable<​code>​ execv ("​./​rustyshell",​ "​command"​);​ </​code>​ 
 +</hidden> 
 +  * opérateurs d'​exécution conditionnelle ''​ && ''​ et ''​ || ''​ 
 +    * seront utilisés pour exécuter des commandes en fonction du code d'​erreur;​ 
 +    * ''​ expr1 && expr2 ''​ n'​exécutera les commandes ''​ expr2 ''​ que si la commande ''​ expr1 ''​ génère un code d'​erreur '​0'​ '; 
 +    * ''​ expr1 || expr2 ''​ n'​exécutera les commandes ''​ expr2 ''​ que si les commandes ''​ expr1 ''​ génèrent un code d'​erreur différent de zéro. 
 +  * l'​opérateur de pipe ''​ | ''​ est interpolé entre deux commandes. L'​effet est la redirection de ce que le premier processus écrit sur l'​écran vers ce que le deuxieme processus lit du clavier . Par exemple, ''​ expr1 | expr2 ''​ entraînera l'​exécution des commandes ''​ expr1 ''​ avec la sortie standard redirigée vers le stdin des commandes ''​ expr2 '';​
  
-Les commandes supportées par l'application mini-busybox sont: +La priorité des opérateurs d'exécution est, de la priorité la plus grande à la plus petite:
-   * **pwd** - Affiche le chemin complet du directoire courant ([[https://​linux.die.net/​man/​1/​pwd]]).+
  
-**Exemple:​**+  - opérateur ​ pipe 
 +  - opérateurs d'​exécution conditionnelle 
 +  - opérateur de parallélisme (pas utilise) 
 +  - opérateur de séquençage
  
-<code bash> +Le shell doit également prendre en charge les redirecteurs suivants:
-$ ./​rusty-busybox pwd +
-/​home/​pi/​my_directories +
-</​code>​+
  
-   * ** echo [option] arguments** - Affiche les arguments de la console, suivies par une nouvelle ligne ([[https://​linux.die.net/​man/​1/​echo]]). En cas d'​erreur ​il renvoie ​la valeur -10 (la valeaur 246 sera affiché dans le terminal). +  ​''​ < nom_fichier ''​ pour rediriger l'​entrée standard à partir du fichier ''​nom_fichier'';​ 
-     *  **-n** on n'ajoute pas une nouvelle ligne+  ​''​ > nom_fichier ''​ pour rediriger la sortie standard vers le fichier ''​ nom_fichier '';​ 
 +  ​''​ 2> nom_fichier ''​ pour rediriger ​la sortie ​d'​erreur ​standard vers le fichier ''​ nom_fichier '';​ 
 +  * ''​ &> nom_ficher''​ pour rediriger ​la sortie standard et la sortie d'​erreur standard vers le fichier ''​nom_fichier'';​ 
 +  * ''​ %% >> %% nom_fichier ''​ pour rediriger la sortie standard vers le fichier ''​ nom_fichier ''​ en mode // append //; 
 +  ​* '' 2 %% >> %% nom_fichier ''​ pour rediriger la sortie d'​erreur standard vers le fichier ''​ nom_fichier ''​ en mode // append //.
  
-**Exemple:**+Finalement, le shell doit accepter les commandes internes suivantes:
  
-<code bash> +  * ''​ exit ''​ et ''​ quit ''​ pour terminet le shell 
-$ ./​rusty-busybox echo a b c +  * ''​ cd directory ''​ pour changer le répertoire actuel 
-b c +    * ** ATTENTION **: Le rustyshell doit toujours fonctionner ​l'​utilisation de  la commande ''​ cd ''​ sans paramètre, remplacer le répertoire en cours par le répertoire ​//home// de l'​utilisateur courant (variable %%$%%HOME)
-$ ./rusty-busybox echo -n a b c +
-a b c +
-</​code>​+
  
-   **cat fichiers** - Concatène le contenu des fichiers et l'affiche a la sortie standard ​([[https://​linux.die.net/​man/​1/​cat]]). En cas d'erreur il renvoie la valeur ​-20 (la valeaur 236 sera affiché ​dans le terminal).+Le shell doit aussi supporter les sous-commandes:​ 
 +  ​Le format d'utilisation est ''​commande $(commande ou liste commandes)''  
 +  * pour celles-ci, on va exécuter tout ce qu'on trouve entre les paranthese et le résultat ​sera remplacé ​dans la liste de commandes
  
-**Exemple:​**+==== Remarques générales ====
  
-<code bash> +  * Vous n'avez pas besoin d'​écrire l'​analyseur de ligne de commande, vous pouvez utiliser celui du modèle de devoir
-./​rusty-busybox cat file1 +
-Text in file1                        +
-$ ./​rusty-busybox cat file2 +
-Text in file 2 +
-$ ./​rusty-busybox cat file1 file2 +
-Text in file1 +
-Text in file 2  +
-</​code>​+
  
-   * **mkdir directoires** - Crée les directoires envoyés comme parametre, s'ils n'​existent pasSi l'​opération de création des directoires échoue, ​le script va retourner la valeur -30 (la valeaur 226 sera affiché dans le terminal). ([[https://linux.die.net/man/1/mkdir]])+==== Suggestions ​ ==== 
 +Le devoir est relativement complexe par rapport au précédentUn modèle pour le commencement du devoir est disponible sur le [[https://github.com/upb-fils/sde|repository]] dans le répertoire // tema3 //. 
 +Nous vous recommandons de résoudre et de tester toujours le devoir, étape par étape:
  
-**Exemple:​**+    - Lancer des commandes simples (''​ ls '',​ ''​ ls -l ''​) 
 +    - Exécuter des commandes internes (''​ cd '',​ ''​ exit '',​ ''​quit''​) 
 +    - mise en place de redirections (opérateurs ''​ < '',​ ''​ > '',​ ''​ 2> '',​ ''​ &> '',​ ''​ >> '',​ ''​ 2>> ''​) 
 +    - séquencement des commandes (opérateurs ''&&'',​ ''​||'',​ '';''​) 
 +    - implémentation des opérateurs ''​ & ''​ (parallèle,​ pas utilise) 
 +    - ''​ | ''​
  
 +   * Voici quelques exemples de commandes et le résultat généré par celles-ci:
 <code bash> <code bash>
- ./rusty-busybox mkdir my_drectory + $ ls 
- ./rusty-busybox mkdir my_drectory1 my_drectory2 my_drectory3 + ​Makefile  ​ README.checker ​ mini-shell mini-shell.o ​ parser 
-</​code>​+ Makefile.checker ​ inputs  ​ mini-shell.c outputs ​      tags
  
-   * **mv source destination** - Déplace/Renomme le fichier/directoire source dans la destination ([[https://linux.die.net/man/1/mv]]). En cas d'​erreur il renvoie la valeur -40 (la valeaur 216 sera affiché dans le terminal).+ $ cat /etc/services | grep telnet 
 + ​telnet 23/tcp 
 + ​rtelnet 107/tcp # Remote Telnet 
 + ​rtelnet 107/udp 
 + ​telnets 992/tcp # Telnet over SSL 
 + ​telnets 992/udp 
 + ​tfido 60177/​tcp #​ fidonet EMSI over telnet
  
-**Exemple:**+ $ uname -a ; ps  
 + Linux bogdan-desktop 2.6.31-19-generic #56-Ubuntu SMP Thu Jan 28 02:39:34 UTC 2010 x86_64 GNU/Linux 
 +   PID TTY          TIME CMD 
 +  6078 pts/0    00:00:00 bash 
 +  6190 pts/0    00:00:00 mini-shell 
 +  6200 pts/0    00:00:00 ps 
 +  
 + $ date && sleep 1 ; echo date 
 + Mon Feb  8 13:40:25 EET 2010 
 + date
  
-<code bash> + $ date && sleep 1; date 
-./​rusty-busybox mv my_file my_directory + Mon Feb  8 13:40:49 EET 2010 
-./rusty-busybox mv my_directory1 my_drectory2 ​ + Mon Feb  8 13:40:50 EET 2010 
-</code>+  
 + $ true && date 
 + Mon Feb  8 13:41:16 EET 2010 
 +  
 + $ false && cat mini-shell.
 +  
 + $ false || date 
 + Mon Feb  8 13:42:36 EET 2010 
 +  
 + $ cat /et/services 
 + cat: /et/services: No such file or directory
  
-   * **ln [option] source nom_lien** - Crée un lien symbolique avec le nom nom_lien vers le fichier source. On peut créer ​ un lien seulement vers un fichier ([[https://linux.die.net/​man/​1/​ln]]). En cas d'​erreur il renvoie la valeur ​-50 (la valeaur 206 sera affiché dans le terminal)+ $ gcc > tmp; echo sep; cat tmp 
-     *  **-s, %%--%%symbolic** crée un lien symbolique a la place d'un lien hard+ gccno input files 
 + sep 
 +  
 + $ strace -e trace=read ls 2> strace.out    
 + ​Makefile  ​ README.checker ​ mini-shell mini-shell.o  parser  ​ tags 
 + Makefile.checker ​ inputs  ​ mini-shell.c outputs ​      ​strace.out ​ tmp 
 +  
 + $ head -1 strace.out 
 + ​read(3,​ "​\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>​\0\1\0\0\0@#​\0\0\0\0\0\0@"​...,​ 832) = 832 
 +  
 + $ pwd; cd Teme; pwd 
 + /​home/​bogdan/​Documents/​SO/​Solutii 
 + /​home/​bogdan/​Documents/​SO/​Solutii/​Teme
  
-**Exemple:​** + $ LETTER=alfa && echo $LETTER 
-<code bash> + alfa 
-./​rusty-busybox ln my_file my_file_link +  
-./​rusty-busybox ln -s my_file my_file_link3 + > ​echo a > test ; echo b >> test && cat test 
-</code+ 
-   * **rmdir directories** - Supprimez les répertoires vides passés comme arguments (https://​linux.die.net/​man/​1/​rmdir). En cas d'​erreur,​ il renvoie la valeur -60 (la valeaur 196 sera affiché dans le terminal). + b 
-**Exemple:​** ​ +  
-<code bash> + > ​exit</​code>​ 
-./​rusty-busybox rmdir my_empty_directory +===== Documents d'aide ===== 
-./​rusty-busybox rmdir my_empty_directory1 my_empty_directory2 +Cours utiles:
-</​code>​ +
-   * **rm [options] fichiers/​directoires** - Supprime les fichiers ou les directoires passés comme arguments. Sans options, il ne peut pas supprimer des directoires. S'il recoit comme parametres aussi des fichiers, que des directoires,​ il va supprimer seulement les fichiers et il va retourner la valeur -70 (la valeaur 186 sera affiché dans le terminal). ([[https://​linux.die.net/​man/​1/​rm]]) +
-     ​* ​ **-r, -R, %%--%%recursive** - Supprime les idrectoires et leur contenu +
-     * **-d, %%--%%dir** - Supprime les directoires sans contenu+
  
-**Exemple:**+  ​*[[sde2:​cursuri:​01]] 
 +  ​*[[sde2:cursuri:​02]] 
 +  ​*[[sde2:​cursuri:​03]] 
 +  ​*[[sde2:​cursuri:​04]] 
 +  *[[sde2:​cursuri:​05]] 
 +Laboratoires utiles:
  
-<code bash> +  *[[sde2:​laboratoare:​00_rust]] 
-./​rusty-busybox rm my_file1 my_file2 +  ​*[[sde2:​laboratoare:​01_rust]] 
-./​rusty-busybox rm -R my_directory +  ​*[[sde2:​laboratoare:​02_rust]] 
-./​rusty-busybox rm --dir my_empty_directory +  ​*[[sde2:​laboratoare:​03_rust]] 
-</​code>​+  ​*[[sde2:​laboratoare:​04_rust]]
  
-   * ** ls [options] [directoire]** - Liste le contenu di directoire. Si on ne spécifie aucun directoire, il va lister le contenu du directoire courant; sans l'​option **-a/​-all**,​ on n'​affiche pas les fichiers/​directoires cachés (dont le nom commence par . ). S'il recoit comme parametre le chemin vers un fichier, il va afficher le fichier. Chaque fichier/​directoire sera affiché sur une nouvelle ligne ([[https://​linux.die.net/​man/​1/​ls]]). En cas d'​erreur il renvoie la valeur -80 (la valeaur 176 sera affiché dans le terminal). 
-     ​* ​ **-a, %%--%%all** - Affiche aussi les fichiers/​directoires cachés, dont le nom commence par "​." ​ 
-     ​* ​ **-R, %%--%%recursive** - Liste le contenu de chaque directoire de l'​hiérarchie. Pour les fichiers/​directoires qui ne se trouvent pas directement dans le point de lecture, il va afficher le chemin complet, ex: output/​test/​file. 
  
 +===== Traitement de la ligne de commande =====
 +Pour traiter la ligne de commande, nous avons déjà écrit un analyseur que vous pouvez utiliser.
  
-**Exemple:​**+Pour voir à quoi ressemble la structure de données à partir de l'​analyseur,​ exécutez le modèle et apres introduisez une commande du clavier.
  
 <code bash> <code bash>
-./​rusty-busybox ls +cargo run 
-  ​directory1 +  
-  Directory2 +$ ls 
-  File1 +Command "​ls"​ 
-  file2 +SimpleCommand { 
-./​rusty-busybox ​ls -a +    ​assignments:​ [], 
-  . +    ​parameters:​ [ 
-  .. +        [ 
-  ​directory1 +            Word( 
-  ​Directory2 +                "​ls", 
-  File1 +            ), 
-  File2 +        ], 
-$ ./​rusty-busybox ​ls Directory2 +    ], 
-  f1 +    ​redirects:​ [], 
-  f2 +}
-</​code>​+
  
-   * **cp [optionsource destination** - Copie un fichier ou un directoire de la source dans la destination. Si on ne mentionne pas le nomme de la destinationle fichier sera copié sous le nom de la source ([[https://​linux.die.net/​man/​1/​cp]]). En cas d'​erreur il renvoie la valeur -90 (la valeaur 166 sera affiché dans le terminal). +$ ls && echo "​folder exists"​ 
-     *  **-R-r%%--%%recursive** - Copie de maniere récursive; il est utilisé pour copier des directoires avec tout leur contenu +Command "ls && echo \"​folder exists\""​ 
- +AndCommand( 
- +    SimpleCommand { 
-**Exemple:​** +        assignments: ​[], 
- +        parameters: ​[ 
-<code bash> +            ​[ 
-./​rusty-busybox cp my_file my_directory +                Word( 
-./​rusty-busybox cp -r my_directory1 my_directory2+                    "​ls",​ 
 +                ), 
 +            ], 
 +        ], 
 +        redirects[]
 +    }, 
 +    SimpleCommand { 
 +        assignments:​ []
 +        parameters: [ 
 +            [ 
 +                Word( 
 +                    "​echo",​ 
 +                ​)
 +            ], 
 +            [ 
 +                Quotes( 
 +                    [ 
 +                        [ 
 +                            Word( 
 +                                "​folder",​ 
 +                            ​), 
 +                        ], 
 +                        [ 
 +                            Word( 
 +                                " "
 +                            ), 
 +                        ], 
 +                        [ 
 +                            Word( 
 +                                "​exists",​ 
 +                            ), 
 +                        ], 
 +                    ], 
 +                ), 
 +            ], 
 +        ], 
 +        redirects: [], 
 +    }, 
 +)
 </​code>​ </​code>​
  
-   * **touch [options] fichier** - Met à jour la date et l'​heure d'​acces et de modification d'un fichier à la date et heure courantes. Si le fichier n'​existe pas, il est créé au moment de l'​exécution du programme (([[https://​linux.die.net/​man/​1/​touch]]). En cas d'​erreur il renvoie la valeur -100 (la valeaur 156 sera affiché dans le terminal). +===== La structure afichee en rustyshell =====
-     ​* ​ **-a** - Change seulement la date et l'​heure d'​acces +
-     ​* ​ **-c, %%--%%no-create** - On ne crée pas le fichier s'il n'​existe pas +
-     ​* ​ **-m** - Change seulement la date et l'​heure de modification+
  
-**Exemple:**+Pour comprendre comment utiliser la structure renvoyée par l'​analyseur,​ exécutez la commande ''​cargo doc --open''​ et examinez le module //parser::​ast//​. ​
  
-<code bash> 
-./​rusty-busybox touch my_file 
-./​rusty-busybox touch -a --no-create my_file 
-</​code>​ 
- 
-   * ** chmod permissions fichier/​directoire** - Change les bits de permission (rwx) d'un fichier/​directoire ([[https://​linux.die.net/​man/​1/​chmod]]). En cas d'​erreur il renvoie la valeur -25 (la valeaur 231 sera affiché dans le terminal). 
-Les permissions peuvent etre spécifiées en 2 modes: 
- 
-   - numérique: un numéro formé de 3 chiffres, chacun représentant une valuer sur 3 bits; ex: 650 
-   - ajouter/​supprimer des permissions spécifiques:​ pour chacune de ces 3 catégories (user, group, others), on peut ajouter ou supprimer des permissions. Les catégories sont: u - user, g - group, o - others, a - all. Le format générique:​ **u/g/o/a +/- r/w/x** 
- 
-**Exemple:​** 
- 
-<code bash> 
-./​rusty-busybox chmod 570 file 
-./​rusty-busybox chmod u+x file 
-./​rusty-busybox chmod ug+rx file 
-./​rusty-busybox chmod a-rx file 
-</​code>​ 
- 
-Pour plus de détails sur le mode de fonctionnement de chaque commande, vous pouvez consulter le manuel spécifique du terminal de Linux: **man commande**. La commande peut etre exécutée en chaque terminal d'un système Linux ou dans le lien attaché a la commande. 
- 
-===== Règles d'​implémentation ===== 
- 
-   * Dans l'​implémentation du devoir, vous allez utiliser l'​environnement de programmation Python3. 
-   * Le fichier principal doit avoir le nom **busybox.py**,​ car c'est le seut fichier que le systeme de test va prendre en compte. 
-   * Pour implémenter les commandes supportées,​ toutes les opérations seront effectuées seulement en utilisant des fontions POSIX de la bibliotheque **os** caractéristique a Python ([[https://​docs.python.org/​3/​library/​os.html]]). 
-   * Le programme réalisé doit avoir un comportement générique. Si on observe que le devoire est résolu seulement pour passer certains tests, les points correspondant a ces tests seront annulés. 
- 
-<note warning> 
-Utilisez uniquement la bibliothèque Python ** os **, pas la bibliothèque Python posix. 
-</​note>​ 
- 
- 
-===== Télécharger les devoirs ===== 
-Les devoirs doivent être téléchargés sur [[https://​vmchecker.cs.pub.ro|vmchecker]]. ​ 
-Connectez-vous avec votre nom d'​utilisateur moodle, sélectionnez le cours //Systemes d'​Explotation (FILS)// et téléchargez [[#​archivage-de-devoir | l'​archive de devoir]]. 
- 
-==== Readme ==== 
-Le fichier //readme// a le format suivant: 
- 
-<​code>​ 
-Nom complet 
-Groupe 
- 
-Une explication comment vous avez écrit le devoir, ce que vous avez utilisé, les idées principales. 
-</​code>​ 
- 
- 
-==== Archivage de devoir ==== 
-Pour télécharger votre devoir, suivez les instructions suivantes: 
- 
-  - Créez une archive zip (pas rar, ace, 7zip ou autre) contenant: 
-    * Le fichier ./​rusty-busybox 
-    * Tout autre fichier python supplémentaire dont vous avez besoin 
-    * le fichier Readme 
-  - Connectez-vous avec [[https://​vmchecker.cs.pub.ro|vmchecker]] 
-  - sélectionner le cours //Systemes d'​Explotation (FILS)// 
-  - sélectionnez //2. Allocator// 
-  - télécharger l'​archive 
- 
- 
-L'​archive doit contenir tous les fichiers principaux dans la racine, pas dans des sous-directoires. NE PAS archiver le directoire du devoir, mais les fichiers DIRECTEMENT. 
-Lorsque l'​archive est téléchargée,​ //​vmchecker//​ va exécuter: 
- 
-<code bash> 
-unzip archive.zip homework 
-cd homework 
-python3 busybox.py commande parametres 
-</​code>​ 
sde2/teme/tema_fr_2_rust.1647085505.txt.gz · Last modified: 2022/03/12 13:45 by alexandru.radovici
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