Examen de Système I
Licence - Septembre 2002

Exercice

Étant donné les références (et droits d'accès associés) suivantes :
drwxr-xr-x   32 root     sys          1024 mai  3  2001 /
drwxr-xr-x    4 root     sys          4096 jan 12 04:05 /users
drwxr-x--x   49 root     sys          4096 jan 12 04:05 /users/home
drwxr-x--x   47 yunes    ens          4096 jan 12 04:05 /users/home/yunes
-rw-r-----    1 yunes    staff         512 mai  3  2001 /users/home/yunes/bidule
drwxrwxr-x    2 root     sys           512 jan 12 04:05 /users/home/yunes/subdir
Répondre aux questions suivantes (on peut supposer qu'il existe de nombreux autres utilisateurs et groupes définis dans le système, il est possible de désigner l'ensemble d'entre eux par le caractère *) :
  1. qui est autorisé à exécuter ls sur la référence /users/home ?
  2. qui est autorisé à lire le fichier désigné par la référence /users/home/yunes/bidule ?
  3. qui est autorisé à exécuter ls sur la référence /users/home/yunes/subdir ?
  4. qui est autorisé à supprimer le répertoire désigné par la référence /users/home/yunes/subdir ?
  5. combien de sous-répertoires le répertoire /users/home/yunes contient-il ?

Exercice

Soit le programme suivant (fichier lec.c compilé sous le nom lec) :
#include <ce_qu_il_faut.h>
off_t liste[6] = { 12, -2, -5, 4, 5, -4 };
int main(int argc,char *argv[]) {
  int d[2], i; char c;
  d[0] = open("ascii",O_RDONLY);
  d[1] = dup(d[0]);
  lseek(d[0],1,SEEK_SET); read(d[0],&c,1); write(STDOUT_FILENO,&c,1);
  for (i=0; i<6; i++) {
    lseek(d[i%2],liste[i],SEEK_CUR); read(d[i%2],&c,1); write(STDOUT_FILENO,&c,1);
  }
  close(d[0]);
  close(d[1]);
  exit(EXIT_SUCCESS);
}
On supposera que le fichier de nom ascii existe et contient les 26 caractères minuscules de l'alphabet.
  1. Quel est le résultat produit lorsqu'on lance la commande lec ?
  2. Si l'on remplace d[1]=dup(d[0]) par d[1]=open("ascii",O_RDONLY), que se passe-t'il ?
  3. Quelles sont (dans les deux cas) les tables du système ?

Exercice

[1] yunes% cat rep/f1
bonjour,
au revoir
[2] yunes% cat rep/f2
hello,
goodbye
[3] yunes% ls rep
ls: rep: Permission denied
On supposera que pendant cette séquence aucune action extérieure ne pertube le système; répondre aux questions suivantes :
  1. Quels sont les droits d'accès du répertoire rep ?
  2. Quel pourrait-être le résultat de la commande ls -l rep/f1 ?
  3. Quel pourrait-être le résultat de la commande ls -l . ?

Problème

On vous propose d'écrire une nouvelle commande de nom nouvelles de fonctionnement très similaire à celui de la commande news.

On suppose que les utilisateurs ont la possibilité de déposer des fichiers dans un répertoire commun de référence /var/nouvelles.

L'exécution de la commande nouvelles sans arguments permet d'afficher le nom puis le contenu de chaque fichier du répertoire commun à condition que lesdits fichiers n'aient pas été déjà lus précédemment (cette information est déduite par comparaison de la date de dernière modification du fichier concerné et la date de dernière modification d'un fichier de nom .dernieres_nouvelles situé dans le répertoire privé de chaque utilisateur).

L'exécution de la commande nouvelles -a permet d'afficher la liste des noms de fichier du répertoire commun.

L'exécution de la commande nouvelles référence permet d'afficher le contenu du fichier situé dans le répertoire commun.


Jean-Baptiste Yunes 2002-09-16