Université BORDEAUX 1 | U.F.R. Mathématiques et Informatique |
Epreuve de J.Bétréma | 8 septembre 1999 |
Durée: 2 heures
Tous documents interdits.
Le barème indicatif indique l'importance relative des questions ; une règle de trois est appliquée lors de la correction pour obtenir des notes échelonnées entre 0 et 20.
Un corrigé est disponible après le sujet.
+nestor:~$ df /tmp Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda1 1190014 1052627 75901 93% / +nestor:~$ df /home/samba Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda4 1474727 637319 761204 46% /home
+nestor:~/public_html$ pwd /usr/labri/betrema/public_html +nestor:~/public_html$ df . Filesystem 1024-blocks Used Available Capacity Mounted on raid2:/export/home 175087221 45435453 127900896 26% /auto/raid2/export/home +nestor:~/public_html$ ls -li | grep seminaire 832737 -rw-r--r-- 2 betrema combenum 10557 May 17 19:45 seminaire.html 832740 -rw-r--r-- 1 betrema combenum 23552 Sep 29 1997 seminaire96.html 832741 -rw-r--r-- 1 betrema combenum 8012 Oct 14 1998 seminaire97.html 832737 -rw-r--r-- 2 betrema combenum 10557 May 17 19:45 seminaire98.html
832737 -rw-r--r-- 2 betrema combenum 10557 May 17 19:45 seminaire.html 832737 -rw-rw-rw- 2 betrema combenum 10557 May 17 19:45 seminaire98.htmlJustifier soigneusement la réponse.
832737 -rw-r--r-- 3 betrema combenum 10557 May 17 19:45 seminaire.htmlJustifier soigneusement la réponse.
void main (int argc, char **argv) { struct stat buf; int desc; char *ptr_debut, *ptr_fin; int debut, fin; sscanf (argv[2], "%d", &debut); sscanf (argv[3], "%d", &fin); stat (argv[1], &buf); if (buf.st_size < fin) fin = buf.st_size; desc = open (argv[1], O_RDONLY); ptr_debut = mmap ( NULL, /* adresse de projection non spécifiée */ debut - 1, /* taille du segment */ PROT_READ, MAP_PRIVATE, desc, (off_t) 0 /* offset = décalage */ ); ptr_fin = mmap ( NULL, buf.st_size - fin, PROT_READ, MAP_PRIVATE, desc, (off_t) fin ); close (desc); desc = open (argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666); write (desc, ptr_debut, debut - 1); write (desc, ptr_fin, buf.st_size - fin); close (desc); }
De façon générale, quelle est la fonction de ce programme ?
Voici par exemple un extrait du répertoire / fourni par un programme de lecture directe des répertoires :
+nestor:~/systemes$ dir / inode 2, . inode 32641, root inode 2, .. inode 34681, sbin inode 11, lost+found inode 36721, usr inode 2041, home inode 10221, misc inode 4081, var inode 24632, net inode 6121, dev inode 186000, dos inode 8161, etc inode 120646, opt inode 10201, tmp inode 120680, tftpboot inode 14281, bin inode 269658, cdrom inode 16321, boot inode 24619, c inode 20401, lib inode 213, bookmarks inode 24481, mnt inode 34963, nsmail inode 30601, proc inode 263241, samEt voici le résultat de la commande ls>, qui tient compte des points de montage :
+nestor:~$ ls -Ui / 11 lost+found 14281 bin 34681 sbin 120680 tftpboot 2 home 16321 boot 36721 usr 269658 cdrom 2 var 20401 lib 10221 misc 24619 c 6121 dev 24481 mnt 3 net 213 bookmarks 8161 etc 1 proc 186000 dos 34963 nsmail 10201 tmp 32641 root 120646 opt 2 samLes répertoires home, sam et var, qui ont apparemment le même inode (numéro 2), sont des points de montage (les répertoires proc et net sont des points de montage de systèmes de fichiers virtuels).
+nestor:~/public_html$ ln seminaire.html /tmp/seminaire.html ln: cannot create hard link `/tmp/seminaire.html' to `seminaire.html': Invalid cross-device linkmais c'est impossible entre systèmes de fichiers différents, comme le rappelle le message ci-dessus.