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écutable
ut.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 *.c dans src/
  • fichiers *.h dans include/
  • fichiers *.c de tests unitaires criterion dans test/

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 :

  • write
  • malloc
  • free
  • opendir
  • readdir
  • closedir
  • stat, lstat (man stat.2)
  • localtime
  • gmtime
  • strerror

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és
  • l: affiche les détails de chaque fichier
  • h : 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- :
    • c character special file,
    • b block special file (représente un disque de stockage),
    • d directory,
    • l symbolic link,
    • s socket,
    • - 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)) ;
  • 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.