Laboratoire 1

Sommaire

L’objectif de ce laboratoire est de vous rafraichir (ou de vous mettre à niveau) par rapport aux prérequis du cours INF1070 et INF3135.

Avoir son Linux

Plusieurs solutions sont possibles :

  • Avoir une distribution native. Pour assister aux séances zoom, vous pouvez alors utiliser leur client web ou leur client Linux natif.
  • Avoir une machine virtuelle (par exemple virtualbox).
  • Utiliser le serveur java de labunix via SSH.

Unix et ligne de commande

  1. Calculer le nombre de fichiers texte existants dans le répertoire courant, et mettre le résultat dans un fichier « f1 »
    • Aide: man ls, man wc, man bash
  2. Afficher la cinquième ligne du fichier « /etc/hosts »
    • Aide: man head, man tail
  3. Créer un lien symbolique vers /bin/sh qui s’appelle toto dans le répertoire courant
    • Aide: man ln
  4. Quelles sont les permissions qui seront données avec la commande :
    • chmod 777
    • chmod 640
    • chmod 005
  5. Listez tous les fichiers et répertoires du répertoire /etc qui commencent par la lettre « c ».
    • Même question en incluant les sous-répertoires de /etc (et en cachant les messages d’erreur).
    • Listez tous les mots du fichier /usr/share/dict/words qui commencent par la lettre « c ».
    • Aide: man glob.7, man find, man grep

Programmation C

Exercice 1

Écrire un programme en C qui lit 6 phrases d’une longueur maximale de 400 caractères au clavier et qui les mémorise dans un tableau de pointeurs sur char en réservant dynamiquement l’emplacement en mémoire pour les chaînes. À chaque lecture de 2 phrases, le programme les enregistre dans un fichier texte, et libère l’emplacement mémoire de ces chaînes juste après.

Exercice 2

Écrire un programme en C qui lit les lignes du fichier passé en argument, les stocke dans un tableau, puis trie les lignes lexicographiquement (en n’échangeant que les pointeurs).

Rappel du trie à bulle : soit la variable «taille» la taille du tableau «tab» qu’on souhaite trier:

for (i=0 ; i < taille-1; i++)
{
    for (j=0 ; j < taille-i-1; j++)
    {
       if (tab[j] > tab[j+1])
       {
          tmp = tab[j];
          tab[j] = tab[j+1];
          tab[j+1] = tmp;
       }
    }
}

Indices :

  • man malloc
  • man free
  • man fopen
  • man fclose
  • man fprintf
  • man strcmp

Bonus: Bandit

Afin de finir le rappel/la mise en niveau en shell et en utilisation des systèmes Unix, il est proposé de faire les exercices de bandit