Click here to load reader

Poly Syst`eme - Lebanese Universityfs2-fanar.com/PhysElect/Fr/download/courses/Info479/poly-etudiant. · PDF file IUT A — Universit´e NANCY II D´epartement Informatique 2001/2002

  • View
    4

  • Download
    0

Embed Size (px)

Text of Poly Syst`eme - Lebanese...

  • IUT A — Université NANCY II

    Département Informatique

    2001/2002

    Poly Système

    Bernard Mangeol, Isabelle Chrisment,

    Jean François Mari et Denis Roegel

  • TABLE DES MATIÈRES version du 30 novembre 2001

    1

    Table des matières

    I Rappels 7

    1 Les outils Unix pour développer en C 9

    1.1 L’éditeur Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.2 Le compilateur gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.2.1 Exemples d’utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.2.2 Les options de compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.3 Le débogueur gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.3.1 Les principales commandes de gdb . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.4 Les Makefiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.4.2 Comment ça marche? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.4.3 Quelques règles de syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    1.4.4 Règles implicites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.5 Envoi de programmes par courrier électronique . . . . . . . . . . . . . . . . . . . . . 14

    2 Compléments en C 17

    2.1 La manipulation des châınes de bits . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.1 Définitions de constantes dans différentes bases . . . . . . . . . . . . . . . . . 17

    2.1.2 Les opérateurs logiques ET et OU . . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.3 Les opérateurs de décalage de bits . . . . . . . . . . . . . . . . . . . . . . . . 17

    2.1.4 Positionnement d’un bit à 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.1.5 Positionnement d’un bit à 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.1.6 Tester un bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.2 Définition d’un pointeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.3 Utilisation des pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.3.1 L’opérateur & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.3.2 Propriétés de l’opérateur & . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.3.3 L’opérateur d’accès indirect * . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.3.4 L’opérateur d’accès indexé [] . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

  • 2 TABLE DES MATIÈRES

    2.4 Les tableaux de pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2.4.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    2.4.2 Les arguments de la commande main . . . . . . . . . . . . . . . . . . . . . . . 21

    2.5 Exemple récapitulatif : la fonction Unix echo . . . . . . . . . . . . . . . . . . . . . . 22

    2.5.1 Exemple d’interaction avec le shell . . . . . . . . . . . . . . . . . . . . . . . . 22

    II Fichiers et processus 23

    3 Le système de gestion de fichiers 25

    3.1 Entrées/sorties fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3.1.1 Notion de table des i-nœuds . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    3.1.2 Les types de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    3.1.3 Descripteurs de fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    3.1.4 Pointeurs vers un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    3.1.5 Description de quelques primitives et fonctions . . . . . . . . . . . . . . . . . 27

    3.2 La manipulation des répertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    3.2.1 Les fonctions opendir() et closedir() . . . . . . . . . . . . . . . . . . . . . 30

    3.2.2 La fonction readdir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.2.3 Exercice : la lecture d’un répertoire . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.3 Les verrous POSIX : définitions et utilité . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3.4 La primitive lockf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    3.5 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.5.1 Remarque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6 Exercices sur le SGF Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6.1 Ex. 1 : to_exe (simple) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6.2 Ex. 2 : facile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6.3 Ex. 3 : lwd (facile) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.6.4 Ex. 4 : plus dur et plus long . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.7 Exercices sur les caractéristiques des utilisateurs . . . . . . . . . . . . . . . . . . . . 34

    3.7.1 Ex. 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.7.2 Ex. 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    3.7.3 Ex. 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    4 Les processus 37

    4.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    4.2 Les identificateurs de processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    4.3 L’utilisateur réel et l’utilisateur effectif . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    4.3.1 Les primitives getuid et geteuid . . . . . . . . . . . . . . . . . . . . . . . . 38

  • TABLE DES MATIÈRES version du 30 novembre 2001

    3

    4.3.2 La primitive getlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    4.3.3 Les commandes getpwnam et getpwuid . . . . . . . . . . . . . . . . . . . . . . 39

    4.4 Les principales primitives de gestion de processus . . . . . . . . . . . . . . . . . . . . 39

    4.4.1 Primitive fork() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    4.4.2 Primitive wait() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    4.4.3 Primitive exit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    4.5 Les primitives exec() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4.5.1 Recouvrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    4.5.2 Comportement vis-à-vis des fichiers ouverts . . . . . . . . . . . . . . . . . . . 47

    4.5.3 Remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    4.5.4 Exercices : écriture d’une version simplifiée des commandes if et for . . . . 48

    III Communication 49

    5 Communication inter-processus 51

    5.1 Les signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    5.1.2 Types de signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    5.1.3 Traitement des signaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    5.1.4 Communication entre processus . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    5.1.5 Deux signaux particuliers : SIGCLD et SIGHUP . . . . . . . . . . . . . . . . . . 56

    5.1.6 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.2 Les pipes ou tubes de communication . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.2.2 Particularités des tubes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    5.2.3 Création d’un conduit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.2.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.3 Les messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.3.2 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

    5.4 Les sémaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    5.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    5.4.2 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    5.4.3 Sémaphores de Dijkstra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

    5.4.4 Implémentation des sémaphores de Dijkstra . . . . . . . . . . . . . . . . . . . 73

    5.4.5 Exemple d’utilisation des sémaphores de