Programmation du système Unix en Objective Caml
176 pages
Français

Programmation du système Unix en Objective Caml

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
176 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Programmation du syst`eme Unix
en Objective Caml
1Xavier Leroy et Didier R´emy
2c 1991, 1992, 2003, 2004, 2005, 2006, 2008.
1. INRIA Rocquencourt
2. Droitsr´eserv´es.Distribut´esouslicenceCreative CommonsPaternit´e–Pas d’Utilisation Commerciale–
Partage des Conditions Initiales a` l’Identique 2.0 France. Voir http://creativecommons.org/
licenses/by-nc-sa/2.0/fr/. pour les termes l´egaux. R´esum´e
Ce document est un cours d’introduction a` la programmation du syst`eme Unix,
mettant l’accent sur la communication entre les processus. La principale nouveaut´e
de ce travail est l’utilisation du langage Objective Caml, un dialecte dulangage ML,
a` la place dulangage Cquiest d’ordinaireassoci´e a`la programmation syst`eme. Ceci
donne des points de vue nouveaux a` la fois sur la programmation syst`eme et sur le
langage ML.
Unix system programming in Objective Caml
This document is an introductory course on Unix system programming, with an
emphasis on communications between processes. The main novelty of this work is
the use of the Objective Caml language, a dialect of the ML language, instead of
the C language that is customary in systems programming. This gives an unusual
perspective on systems programming and on the ML language.
2 Table des mati`eres
1 G´en´eralit´es 7
1.1 Les modules Sys et Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Interface avec le programme appelant . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Traitement des erreurs ...

Sujets

Informations

Publié par
Nombre de lectures 155
Langue Français
Poids de l'ouvrage 1 Mo

Extrait

Programmation du syst`eme Unix en Objective Caml 1Xavier Leroy et Didier R´emy 2c 1991, 1992, 2003, 2004, 2005, 2006, 2008. 1. INRIA Rocquencourt 2. Droitsr´eserv´es.Distribut´esouslicenceCreative CommonsPaternit´e–Pas d’Utilisation Commerciale– Partage des Conditions Initiales a` l’Identique 2.0 France. Voir http://creativecommons.org/ licenses/by-nc-sa/2.0/fr/. pour les termes l´egaux. R´esum´e Ce document est un cours d’introduction a` la programmation du syst`eme Unix, mettant l’accent sur la communication entre les processus. La principale nouveaut´e de ce travail est l’utilisation du langage Objective Caml, un dialecte dulangage ML, a` la place dulangage Cquiest d’ordinaireassoci´e a`la programmation syst`eme. Ceci donne des points de vue nouveaux a` la fois sur la programmation syst`eme et sur le langage ML. Unix system programming in Objective Caml This document is an introductory course on Unix system programming, with an emphasis on communications between processes. The main novelty of this work is the use of the Objective Caml language, a dialect of the ML language, instead of the C language that is customary in systems programming. This gives an unusual perspective on systems programming and on the ML language. 2 Table des mati`eres 1 G´en´eralit´es 7 1.1 Les modules Sys et Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Interface avec le programme appelant . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Traitement des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4 Fonctions de biblioth`eque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Les fichiers 13 2.1 Le syst`eme de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 Noms de fichiers, descripteurs de fichiers . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 M´eta-donn´ees, types et permissions . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.4 Op´erations sur les r´epertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5 Exemple complet : recherche dans la hi´erarchie . . . . . . . . . . . . . . . . . . . 19 2.6 Ouverture d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.7 Lecture et ´ecriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.8 Fermeture d’un descripteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.9 Exemple complet : copie de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.10 Couˆt des appels syst`eme. Les tampons.. . . . . . . . . . . . . . . . . . . . . . . . 26 2.11 Exemple complet : une petite biblioth`eque d’entr´ees-sorties . . . . . . . . . . . . 27 2.12 Positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.13 Op´erations sp´ecifiques a` certains types de fichiers . . . . . . . . . . . . . . . . . . 31 2.14 Verrous sur des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.15 Exemple complet : copie r´ecursive de fichiers . . . . . . . . . . . . . . . . . . . . 34 2.16 Exemple : Tape ARchive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3 Les processus 43 3.1 Cr´eation de processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Exemple complet : la commande leave . . . . . . . . . . . . . . . . . . . . . . . 44 3.3 Attente de la terminaison d’un processus . . . . . . . . . . . . . . . . . . . . . . . 44 3.4 Lancement d’un programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.5 Exemple complet : un mini-shell . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4 Les signaux 51 4.1 Le comportement par d´efaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2 Produire des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.3 Changer l’effet d’un signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4 Masquer des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5 Signaux et appels-syst`eme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.6 Le temps qui passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.7 Probl`emes avec les signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3 5 Communications inter-processus classiques 61 5.1 Les tuyaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ´5.2 Exemple complet : le crible d’Eratosth`ene parall`ele . . . . . . . . . . . . . . . . . 63 5.3 Les tuyaux nomm´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.4 Redirections de descripteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.5 Exemple complet : composer N commandes . . . . . . . . . . . . . . . . . . . . . 68 5.6 Multiplexage d’entr´ees-sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.7 Miscelleaneous : write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6 Communications modernes : les prises 77 6.1 Les prises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.2 Cr´eation d’une prise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 6.3 Adresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.4 Connexion a` un serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.5 D´econnexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.6 Exemple complet : Le client universel . . . . . . . . . . . . . . . . . . . . . . . . 81 ´6.7 Etablissement d’un service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 6.8 R´eglage des prises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 6.9 Exemple complet : le serveur universel . . . . . . . . . . . . . . . . . . . . . . . . 86 6.10 Communication en mode d´econnect´e . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.11 Primitives de haut niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6.12 Exemples de protocoles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.13 Exemple complet : requˆetes http . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7 Les coprocessus 101 7.1 G´en´eralit´es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 7.2 Cr´eation et terminaison des coprocessus . . . . . . . . . . . . . . . . . . . . . . . 102 7.3 Mise en attente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7.4 Synchronisation entre coprocessus : les verrous . . . . . . . . . . . . . . . . . . . 105 7.5 Exemple complet : relais HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 7.6 Les conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.7 Communication synchrone entre coprocessus par ´ev´enements . . . . . . . . . . . 111 7.8 Quelques d´etails d’impl´ementation . . . . . . . . . . . . . . . . . . . . . . . . . . 114 A Corrig´e des exercices 121 B Interfaces 135 B.1 Module Sys : System interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 B.2 Module Unix : Interface to the Unix system . . . . . . . . . . . . . . . . . . . . . 138 B.3 Module Thread : Lightweight threads for Posix 1003.1c and Win32. . . . . . . . 166 B.4 Module Mutex : Locks for mutual exclusion. . . . . . . . . . . . . . . . . . . . . . 168 B.5 Module Condition : Condition variables to synchronize between threads. . . . . 169 B.6 Module Event : First-class synchronous communication. . . . . . . . . . . . . . . 170 B.7 Module Misc : miscelleaneous functions for the Unix library . . . . . . . . . . . . 171 C Index 173 4 Introduction Ces notes sont issues d’un cours de programmation syst`eme que Xavier Leroy a enseign´e en premi`ereann´eeduMagist`ere deMath´ematiques Fondamentales etAppliqu´eesetd’Informatique ´del’EcoleNormaleSup´erieureen1994.Cettepremi`ereversionutilisaitlelangageCaml-Light[1]. Didier R´emy en a fait une traduction pour le langage OCaml [2] pour un cours enseign´e en ´ `Majeured’Informatiquea`l’EcolePolytechniquede2003`a2006.Acetteoccasion,GillesRoussel, Fabrice Le Fessant et Maxence Guesdon qui ont aid´e a` ce cours ont ´egalement contribu´e a` am´eliorer ces notes. Cette version comporte des ajouts et quelques mises `a jour : en presque une d´ecennie certains ordres de grandeur ont d´ecal´e leur virgule d’un chiffre; aussi, la toile ´etait seulement en train d’ˆetre tiss´ee et l’exemple, aujourd’hui classique, du relais HTTP aurait presqu’eut un cot´e pr´ecurseur en 1994. Mais surtout le langage OCaml a gagn´e en maturit´e depuis et a ´et´e utilis´e dans de v´eritables applications syst`eme, telles que Unison [16]. La tradition veut que la programmation du syst`eme Unix se fasse dans le langage C. Dans le cadre de ce cours, il a sembl´e plus int´eressant d’utiliser un langage de plus haut niveau, Caml en l’occurrence, pour expliquer la programmation du syst`eme Unix. La pr´esentation Caml des appels syst`emes est plus abstraite, utilisant toute la puissance de l’alg`ebre de types de ML pour repr´esenter de mani`ere claire les arguments et les r´esultats, au lieu dedevoir tout coder en termes d’entiers et de champs de bits comme en C.En cons´equence, il est plus facile d’expliquer la s´emantique des appels syst`emes, sans avoir a` se perdre dans les d´etails de l’encodage des arguments et des r´esultats. (Voir par exemple la pr´esentation de l’appel wait, page 44.) De plus, OCaml apporte une plus grande s´ecurit´e de programmation que C, en particulier graˆce au typage statique et a` la clart´e de ses constructions de base. Ces traits, qui peuvent apparaˆıtre au programmeur C chevronn´e comme de simples ´el´ements de confort, se r´ev`elent cruciaux pour les programmeurs inexp´eriment´es comme ceux auxquels
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents