Projet 2 • LS
| Champ | Valeur |
|---|---|
| Auteur·e | Élise |
| Édition | 2024-03-04 |
| Durée | 2~3 semaines |
| Taille des équipes | 1~3 personnes login des auteurs·rices dans author.txt |
| Rendu | via git, dépôt $YEAR_ls, droits en lecture à delivery_collector |
| Compilation | make avec règles all, clean, fclean, re |
| Binaires | ls : exécutableut.out : tests unitaires |
Barème
| Critères | Points |
|---|---|
| ls sans options, trié | 4 |
| ls avec fichiers et dossiers en argument | 4 |
| ls -a | 2 |
| ls -l | 4 |
| ls -h | 3 |
| messages d’erreurs | 2 |
| tests unitaires | 3 |
| Total des critères | 22 |
| Malus par ligne contenant une faute de norme | -0,5 |
| Malus dépôt sale | -5 |
| Note maximale | 20 |
Règlement de projet
Prévention de la triche
La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.
Vous devez respecter les règles de normalisation suivantes : https://git.ecole-89.com/eriizu/coding_style/src/branch/main/norm.md
Le non-respect de la norme vous fera perdre une partie ou la totalité des points qui auraient pu être acquis, sur l’ensemble du rendu.
Fichiers à rendre et compilation
La structure de votre dépôt doit être la suivante :
Makefileà la racine de votre dépôt- fichiers
*.cdanssrc/ - fichiers
*.hdansinclude/ - fichiers
*.cde tests unitaires criterion danstest/
Votre Makefile doit au minimum avoir les règles all, clean, fclean et re
Vous devez aussi avoir une recette par binaire demandé dans le cartouche de sujet. La recette all doit dépendre de celles de binaires demandés.
Tests unitaires
Chacune de vos fonctions doit avoir des tests unitaires associés.
Fonctions autorisées et interdites
Pour tout le sujet, les fonctions autorisées sont :
writemallocfreeopendirreaddirclosedirstat,lstat(manstat.2)localtimegmtimestrerror
Consignes
Vous allez implémenter un recode partiel de l’utilitaire ls. Votre programme doit afficher une liste de fichiers triés par ordre ASCII. Les options que vous devez gérer sont les suivantes :
a: liste aussi les fichiers cachésl: affiche les détails de chaque fichierh: affiche la taille des fichier d’une façon plus facile à lire
Vous devez pouvoir recevoir les options sur n’importe quel argument du main et dans n’importe quelle combinaison.
./ls
./ls -a
./ls -a -l
./ls -la
./la -al
./ls -lah
./ls -h -al
# etc...
Il doit aussi être possible de passer des noms de fichiers et de dossiers à votre ls. Lorsqu’un argument n’est pas un option, vous devez :
- si c’est un dossier : afficher son contenu
- si c’est un fichier : afficher son nom (ou ses détails dans le cas de
-l)
Il peut y avoir plusieurs fichiers/dossiers en argument en plus des options.
Options
option -a
Cette option affiche tous les fichiers. À l’inverse, si elle est absente, n’affichez pas les fichiers cachés.
option -l
Cette option affiche les détails pour chaque fichiers listés. Les détails que vous devez afficher sont :
- le type de fichier sur une lettre
cbdls-:ccharacter special file,bblock special file (représente un disque de stockage),ddirectory,lsymbolic link,ssocket,-regular file ;
- les permissions du fichier au format
rwx; - le nombre de hard links ;
- l’utilisateur propriétaire du fichier (pour ce projet : seulement son numéro) ;
- le groupe propriétaire du fichier (pour ce projet : seulement son numéro) ;
- la date de dernière modification au format 2024-03-04 11:06 :
- année toujours sur 4 chiffres, mois, jours, heures et minutes toujours sur deux chiffre (implémentez peut-être
stu_dprintf(1, "%02d", 4)) ;
- année toujours sur 4 chiffres, mois, jours, heures et minutes toujours sur deux chiffre (implémentez peut-être
- le nom du fichier
option -h
Prenons exemple d’un fichier Makefile qui fait 1919 octets. ls -lh affichera une taille de “1,9K”.
$ stat Makefile
File: Makefile
Size: 1919 Blocks: 8 IO Block: 4096 regular file
Device: 254,0 Inode: 818060 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ eriizu) Gid: ( 985/ users)
Access: 2024-03-04 14:59:46.114568223 +0100
Modify: 2024-03-04 14:59:43.641231359 +0100
Change: 2024-03-04 14:59:43.641231359 +0100
Birth: 2024-03-04 14:59:43.641231359 +0100
$ ls -lh Makefile
-rw-r--r-- 1 eriizu users 1,9K 4 mars 14:59 Makefile
Gestions des erreurs
Lorsqu’une fonction des bibliothèques ou un appel système échoue et empêche ls de faire son travail (en partie ou totalement), affichez une erreur au format suivant :
av0: fonction: détail de l'erreur
Exemple :
$ ./ls patate/
./ls: patate: no such file or directory
Bonus
Lorsque vous avez fini, vous pouvez implémenter des fonctionnalités bonus. Les points bonus peuvent être rajoutés sur la note du projet si vous n’aviez pas tous les points au barème ou à la fin du semestre sur votre module.
Exemple de fonctionnalités que vous pouvez ajouter :
- le tri alphabétique insensible à la casse ;
- le tri sémantique ;
- le tri par taille ;
- l’affichage de la date avec le nom des jours de la semaine et le nom du mois :
- 2024-03-05 deviendrait “mardi 5 mars 2024” ou “Tue Mar 5 2024”.
Si vous avez des idées de fonctionnalités, vous pouvez en faire la demande à l’avance pour être certain·e·s qu’elles vous apporterons des point bonus.