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:50]
alexandru.radovici
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). 
-       * **-l** - Afficher toutes les informations sur les fichiers ​ 
-     ​* ​ **-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 +}
-$ ./​rusty-busybox ls -l +
-drwxr-xr-x ​  30 alexandru ​ staff       960 Feb 12 22:40 Desktop +
--rw-r--r-- ​   1 alexandru ​ staff    372944 Nov 29  2020 Title Hello Wyliodrin STUDIO.jpg+
  
-# properties links user group size date name +$ ls && echo "​folder exists"​ 
-./​rusty-busybox ​ls -l Desktop +Command "ls && echo \"​folder exists\""​ 
-drwxr-xr-x ​  30 alexandru ​ staff       960 Feb 12 22:40 Desktop+AndCommand( 
 +    SimpleCommand { 
 +        assignments[], 
 +        parameters: [ 
 +            [ 
 +                Word( 
 +                    "​ls",​ 
 +                ), 
 +            ], 
 +        ], 
 +        redirects: [], 
 +    }, 
 +    SimpleCommand { 
 +        assignments:​ [], 
 +        parameters: [ 
 +            [ 
 +                Word( 
 +                    "​echo",​ 
 +                ), 
 +            ], 
 +            [ 
 +                Quotes( 
 +                    [ 
 +                        [ 
 +                            Word( 
 +                                "​folder",​ 
 +                            ), 
 +                        ], 
 +                        [ 
 +                            Word( 
 +                                " ", 
 +                            ), 
 +                        ], 
 +                        [ 
 +                            Word( 
 +                                "​exists",​ 
 +                            ), 
 +                        ], 
 +                    ], 
 +                ), 
 +            ], 
 +        ], 
 +        redirects: [], 
 +    }, 
 +)
 </​code>​ </​code>​
  
-   * **cp [option] source destination** - Copie un fichier ou un directoire de la source dans la destination. Si on ne mentionne pas le nomme de la destination,​ le 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). +===== La structure afichee en rustyshell =====
-     ​* ​ **-R, -r, %%--%%recursive** - Copie de maniere récursive; il est utilisé pour copier des directoires avec tout leur contenu+
  
 +Pour comprendre comment utiliser la structure renvoyée par l'​analyseur,​ exécutez la commande ''​cargo doc --open''​ et examinez le module //​parser::​ast//​. ​
  
-**Exemple:​** 
- 
-<code bash> 
-./​rusty-busybox cp my_file my_directory 
-./​rusty-busybox cp -r my_directory1 my_directory2 
-</​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). 
-     ​* ​ **-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:​** 
- 
-<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.1647085838.txt.gz · Last modified: 2022/03/12 13:50 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