O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Développement système sous Linux

Book Description

Présentation
Tirer le meilleur parti de l'environnement Linux

La possibilité de consulter les sources du système, de la bibliothèque glibc et de la plupart des applications qui tournent sur cet environnement représente une richesse inestimable aussi bien pour les passionnés qui souhaitent intervenir sur le noyau, que pour les développeurs curieux de comprendre comment fonctionnent les programmes qu'ils utilisent quotidiennement.

Nombreuses sont les entreprises qui ont compris aujourd'hui tout le parti qu'elles pouvaient tirer de cette ouverture des sources, gage de fiabilité et de pérennité, sans parler de l'extraordinaire niveau de compétences disponible au sein d'une communauté de programmeurs aguerris au contact du code des meilleurs développeurs open source.

Un ouvrage conçu pour les programmeurs Linux et Unix les plus exigeants

Sans équivalent en langue française, l'ouvrage de Christophe Blaess constitue une référence complète du développement système sous Linux, y compris dans les aspects les plus avancés de la gestion des processus, des threads ou de la mémoire. Les programmeurs travaillant sous d'autres environnements Unix apprécieront tout particulièrement l'attachement de l'auteur au respect des standards (C Ansi, glibc, Posix...), garant d'une bonne portabilité des applications. Cette troisième édition entièrement actualisée prend en compte les dernières évolutions de la bibliothèque C et du noyau Linux 2.6, notamment la gestion complète des caractères étendus, les ordonnancements multi-processeurs et multi-coeurs, ainsi que les communications IPC Posix.

À qui s'adresse cet ouvrage ?
  • Aux développeurs concernés par les aspects système de la programmation sous Linux et Unix ;
  • Aux administrateurs système en charge de la gestion d'un parc Linux et/ou Unix ;
  • Aux étudiants en informatique (1er et 2e cycles universitaires, écoles d'ingénieurs, etc.).
Sur le site www.editions-eyrolles.com
  • dialoguez avec l'auteur ;
  • téléchargez le code source des exemples ;
  • consultez les mises à jour et compléments.
Au sommaire
  • Concepts et outils
  • Les processus
  • Exécution d'un programme
  • Environnement et ligne de commande
  • Fin d'un programme
  • Déroulement et aspects avancés des Pthreads
  • Fonctions horaires
  • Sommeil des processus et contrôle des ressources
  • Ordonnancements sous Linux
  • Gestion classique des signaux
  • Gestion portable des signaux
  • Signaux temps-réel
  • Gestion de la mémoire du processus
  • Gestion avancée de la mémoire
  • Utilisation des blocs mémoire et des chaînes
  • Tris, recherches et structuration des données
  • Routines avancées de traitement des blocs mémoire
  • Types de données et conversions
  • Entrées-sorties simplifiées
  • Flux de données
  • Descripteurs de fichiers
  • Communications classiques entre processus
  • Communications avec les IPC
  • Entrées-sorties avancées
  • Programmation réseau
  • Utilisation des sockets
  • Accès au contenu des répertoires
  • Attributs des fichiers
  • Accès aux informations du système
  • Internationalisation
  • Gestion du terminal

Table of Contents

  1. Couverture
  2. Titre
  3. Licence
  4. Table
  5. Avant-propos
  6. 1 - Concepts et outils
    1. Généralités sur le développement sous Linux
    2. Outils de développement
      1. Eclipse
      2. NetBeans
      3. Éditeurs de texte
        1. Vi et Emacs
        2. Éditeurs Gnome ou KDE
        3. Nedit
      4. Compilateur, éditeur de liens
      5. Débogueur, profileur
        1. Valgrind
        2. Gprof
      6. Traitement du code source
        1. Vérificateur de code
        2. Mise en forme
      7. Utilitaires divers
      8. Construction d’application
      9. Distribution du logiciel
        1. Archive classique
        2. Paquetage à la manière Red Hat
    3. Bibliothèques supplémentaires pour le développement
      1. Interface utilisateur en mode texte
      2. Développement sous X-Window
      3. Les environnements KDE et Gnome
    4. Conclusion
  7. 2 - Les processus
    1. Principe des processus
      1. Identification par le PID
      2. Identification de l’utilisateur correspondant au processus
      3. Identification du groupe d’utilisateurs du processus
      4. Identification du groupe de processus
      5. Identification de session
      6. Capacités d’un processus
    2. Conclusion
  8. 3 - Exécution d’un programme
    1. Lancement d’un nouveau programme
      1. Causes d’échec de lancement d’un programme
    2. Fonctions simplifiées pour exécuter un sous-programme
    3. Conclusion
  9. 4 - Environnement et ligne de commande
    1. Variables d’environnement
      1. Variables d’environnement couramment utilisées
    2. Arguments en ligne de commande
      1. Options simples – SUSv4
      2. Options longues – Gnu
      3. Sous-options
    3. Exemple complet d’accès à l’environnement
    4. Conclusion
  10. 5 - Fin d’un programme
    1. Terminaison d’un programme
      1. Terminaison normale d’un processus
      2. Terminaison anormale d’un processus
    2. Exécution automatique de routines de terminaison
    3. Attendre la fin d’un processus fils
    4. Signaler une erreur
    5. Conclusion
  11. 6 - Déroulement des Pthreads
    1. Présentation
    2. Implémentation
    3. Création de threads
      1. Passage d’argument à la création d’un thread
      2. Partage d’espace mémoire
    4. Fin d’un thread
      1. Élimination d’un thread
      2. Récupération de la valeur de retour
      3. Détachement des threads
    5. Attributs des threads
    6. Synchronisation entre threads
      1. Les mutex
      2. Verrous R/W locks
    7. Conclusion
  12. 7 - Aspects avancés des Pthreads
    1. Annulation d’un thread
    2. Fonctions de nettoyage
    3. Variables conditions
    4. Types de mutex
    5. Taille de la pile
    6. Appel de fork()
    7. Données globales privées
    8. Conclusion
  13. 8 - Fonctions horaires
    1. Horodatage et type time_t
    2. Lecture de l’heure
    3. Configuration de l’heure système
    4. Conversions, affichages de dates et d’heures
    5. Calcul d’intervalles
    6. Fuseau horaire
    7. Conclusion
  14. 9 - Sommeil des processus et contrôle des ressources
    1. Endormir un processus
      1. Utilisation des temporisations
    2. Timers temps-réel
    3. Suivre l’exécution d’un processus
    4. Obtenir des statistiques sur un processus
    5. Limiter les ressources consommées par un processus
    6. Conclusion
  15. 10 - Ordonnancements sous Linux
    1. États d’un processus
    2. Fonctionnement multitâche, priorités
      1. Modification de la priorité d’un autre processus
    3. Systèmes multiprocesseurs, migrations
      1. Consultation du processeur utilisé
      2. Choix des processeurs autorisés pour une tâche
    4. Ordonnancements temps-réel
      1. Ordonnancement sous algorithme FIFO
      2. Ordonnancement sous algorithme RR
      3. Ordonnancement sous algorithme OTHER
      4. Récapitulation
      5. Temps-réel ?
      6. Modification de la politique d’ordonnancement
    5. Conclusion
  16. 11 - Gestion classique des signaux
    1. Généralités
    2. Liste des signaux sous Linux
      1. Signaux SIGABRT et SIGIOT
      2. Signaux SIGALRM, SIGVTALRM et SIGPROF
      3. Signaux SIGBUS et SIGSEGV
      4. Signaux SIGCHLD et SIGCLD
      5. Signaux SIGFPE et SIGSTKFLT
      6. Signal SIGHUP
      7. Signal SIGILL
      8. Signal SIGINT
      9. Signaux SIGIO et SIGPOLL
      10. Signal SIGKILL
      11. Signal SIGPIPE
      12. Signal SIGQUIT
      13. Signaux SIGSTOP, SIGCONT, et SIGTSTP
      14. Signal SIGTERM
      15. Signal SIGTRAP
      16. Signaux SIGTTIN et SIGTTOU
      17. Signal SIGURG
      18. Signaux SIGUSR1 et SIGUSR2
      19. Signal SIGWINCH
      20. Signaux SIGXCPU et SIGXFSZ
      21. Signaux temps-réel
    3. Émission d’un signal sous Linux
    4. Délivrance des signaux
      1. Réception des signaux avec l’appel système signal()
    5. Conclusion
  17. 12 - Gestion portable des signaux
    1. Réception des signaux avec sigaction()
      1. Configuration des ensembles de signaux
      2. Exemples d’utilisation de sigaction()
    2. Blocage des signaux
    3. Attente d’un signal
      1. Écriture correcte d’un gestionnaire de signaux
      2. Utilisation d’un saut non local
    4. Un signal particulier : l’alarme
    5. Conclusion
  18. 13 - Signaux temps-réel
    1. Caractéristiques des signaux temps-réel
      1. Nombre de signaux temps-réel
      2. Empilement des signaux bloqués
      3. Délivrance prioritaire des signaux
      4. Informations supplémentaires fournies au gestionnaire
    2. Émission d’un signal temps-réel
    3. Traitement rapide des signaux temps-réel
    4. Conclusion
  19. 14 - Gestion de la mémoire du processus
    1. Allocation et libération de mémoire
      1. Utilisation de malloc()
      2. Utilisation de calloc()
      3. Utilisation de realloc()
      4. Utilisation de free()
      5. Règles de bonne conduite pour l’allocation et la libération de mémoire
      6. Désallocation automatique avec alloca()
    2. Débogage des allocations mémoire
      1. Configuration de l’algorithme utilisé par malloc()
    3. Suivi des allocations et des libérations
      1. Surveillance automatique des zones allouées
      2. Fonctions d’encadrement personnalisées
    4. Utilisation de Valgrind
    5. Conclusion
  20. 15 - Gestion avancée de la mémoire
    1. Verrouillage de pages en mémoire
    2. Projection d’un fichier sur une zone mémoire
    3. Protection de l’accès à la mémoire
    4. Conclusion
  21. 16 - Utilisation des blocs mémoire et des chaînes
    1. Manipulation de blocs de mémoire
    2. Mesures, copies et comparaisons de chaînes
    3. Caractères accentués et codage UTF-8
    4. Recherches dans une zone de mémoire ou dans une chaîne
      1. Recherche dans un bloc de mémoire
      2. Recherche de caractères dans une chaîne
      3. Recherche de sous-chaînes
      4. Analyse lexicale
    5. Conclusion
  22. 17 - Tris, recherches et structuration des données
    1. Fonctions de comparaison
    2. Recherche linéaire, données non triées
    3. Recherches dichotomiques dans une table ordonnée
    4. Manipulation, exploration et parcours d’un arbre binaire
    5. Gestion d’une table de hachage
    6. Récapitulatif sur les méthodes d’accès aux données
      1. Recherche linéaire, table non triée
      2. Recherche dichotomique, table triée
      3. Arbre binaire
      4. Table de hachage
    7. Conclusion
  23. 18 - Routines avancées de traitement des blocs mémoire
    1. Utilisation des expressions rationnelles
    2. Cryptage de données
      1. Cryptage élémentaire
      2. Cryptage simple et mots de passe
      3. Cryptage de blocs de mémoire avec DES
    3. Conclusion
  24. 19 - Types de données et conversions
    1. Types de données génériques
      1. Catégories de caractères
      2. Conversions entre catégories de caractères
    2. Conversions entre différents types
    3. Types et conversions mathématiques
      1. Nombres complexes
      2. Conversions de réels en entiers
      3. Infinis et erreurs
        1. Valeur non numérique
        2. Infinis
      4. Représentation des réels en virgule flottante
    4. Conclusion
  25. 20 - Entrées-sorties simplifiées
    1. Flux standard d’un processus
    2. Écritures dans un flux
      1. Écritures formatées
      2. Autres fonctions d’écriture formatée
      3. Écritures simples de caractères ou de chaînes
    3. Saisie de caractères
      1. Réinjection de caractère
      2. Saisie de chaînes de caractères
      3. Lectures formatées depuis un flux
    4. Conclusion
  26. 21 - Flux de données
    1. Différences entre flux et descripteurs
    2. Ouverture et fermeture d’un flux
      1. Ouverture normale d’un flux
    3. Fermeture d’un flux
    4. Présentation des buffers associés aux flux
    5. Ouvertures particulières de flux
    6. Lectures et écritures dans un flux
    7. Positionnement dans un flux
      1. Positionnement classique
      2. Positionnement compatible Unix 98
    8. Problèmes de portabilité
    9. Paramétrage des buffers associés à un flux
      1. Type de buffers
      2. Modification du type et de la taille du buffer
    10. État d’un flux
    11. Conclusion
  27. 22 - Descripteurs de fichiers
    1. Ouverture et fermeture d’un descripteur de fichier
    2. Lecture ou écriture sur un descripteur de fichier
      1. Primitives de lecture
      2. Primitives d’écriture
    3. Positionnement dans un descripteur de fichier
    4. Manipulation et duplication de descripteurs
      1. Duplication de descripteur
      2. Accès aux attributs du descripteur
      3. Attributs du fichier
    5. Verrouillage d’un descripteur
      1. Autre méthode de verrouillage
    6. Conclusion
  28. 23 - Communications classiques entre processus
    1. Les tubes
    2. Les tubes nommés
    3. Conclusion
  29. 24 - Communications avec les IPC
    1. Communications avec les IPC Posix
      1. Files de messages
      2. Mémoire partagée
      3. Sémaphores
      4. Administration des ressources existantes
    2. Les mécanismes IPC Système V
      1. Obtention d’une clé
      2. Ouverture de l’IPC
      3. Contrôle et paramétrage
      4. Files de messages
      5. Mémoire partagée
        1. Sémaphores
    3. Conclusion
  30. 25 - Entrées-sorties avancées
    1. Entrées-sorties non bloquantes
    2. Multiplexage d’entrées-sorties
      1. Attente d’événements – Multiplexage d’entrées
      2. Distribution de données – Multiplexage de sorties
    3. Entrées-sorties asynchrones
      1. Asynchronisme utilisant fcntl()
      2. Asynchronisme compatible Posix.1b
    4. Écritures synchronisées
    5. Conclusion
  31. 26 - Programmation réseau
    1. Réseaux et couches de communication
    2. Résolution de nom
      1. Noms des protocoles
      2. Ordre des octets
      3. Services et numéros de ports
    3. Manipulation des adresses IP
      1. Noms d’hôtes et noms de réseaux
      2. Gestion des erreurs
    4. Conclusion
  32. 27 - Utilisation des sockets
    1. Concept de socket
    2. Création d’une socket
    3. Affectation d’adresse
    4. Mode connecté et mode non connecté
    5. Attente de connexions
    6. Demander une connexion
    7. Fermeture d’une socket
    8. Recevoir ou envoyer des données
    9. Accès aux options des sockets
    10. Programmation d’un démon ou utilisation de inetd
    11. Conclusion
  33. 28 - Accès au contenu des répertoires
    1. Lecture du contenu d’un répertoire
    2. Changement de répertoire de travail
      1. Changement de répertoire racine
    3. Création et suppression de répertoire
    4. Suppression ou déplacement de fichiers
    5. Fichiers temporaires
    6. Recherche de noms de fichiers
      1. Correspondance simple d’un nom de fichier
      2. Recherche sur un répertoire total
      3. Développement complet à la manière d’un shell
        1. Développement du tilde
        2. Substitution des variables
        3. Évaluation arithmétique et exécution de commande
        4. Découpage des mots et développement des noms de fichiers
      4. Descente récursive de répertoires
    7. Conclusion
  34. 29 - Attributs des fichiers
    1. Informations associées à un fichier
      1. Autorisations d’accès
      2. Propriétaire et groupe d’un fichier
    2. Taille du fichier
    3. Horodatages d’un fichier
    4. Liens physiques
    5. Liens symboliques
    6. Nœud générique du système de fichiers
    7. Masque de création de fichier
    8. Surveillance du système de fichiers
    9. Conclusion
  35. 30 - Accès aux informations du système
    1. Groupes et utilisateurs
      1. Fichier des groupes
      2. Fichier des utilisateurs
      3. Fichier des interpréteurs shell
    2. Nom d’hôte et de domaine
      1. Nom d’hôte
      2. Nom de domaine
      3. Identifiant d’hôte
    3. Informations sur le noyau
      1. Identification du noyau
      2. Informations sur l’état du noyau
    4. Système de fichiers
      1. Caractéristiques des systèmes de fichiers
      2. Informations sur un système de fichiers
      3. Montage et démontage des partitions
    5. Journalisation
      1. Journal utmp
      2. Fonctions X/Open
      3. Journal wtmp
      4. Journal syslog
    6. Conclusion
  36. 31 - Internationalisation
    1. Principe
    2. Catégories de localisations disponibles
    3. Traduction de messages
      1. Catalogues de messages gérés par catgets()
      2. Catalogues de messages Gnu GetText
    4. Configuration de la localisation
      1. Localisation et fonctions de bibliothèques
      2. Localisation et fonctions personnelles
        1. Informations numériques et monétaires avec localeconv()
        2. Informations complètes avec nl_langinfo()
    5. Conclusion
  37. 32 - Gestion du terminal
    1. Définition des terminaux
      1. Configuration d’un terminal
      2. Membre c_iflag de la structure termios
      3. Membre c_oflag de la structure termios
      4. Membre c_cflag de la structure termios
      5. Membre c_lflag de la structure termios
      6. Membre c_cc[] de la structure termios
      7. Basculement du terminal en mode brut
    2. Connexion à distance sur une socket
      1. Utilisation d’un pseudo-terminal
    3. Configuration d’un port série RS-232
    4. Conclusion
  38. Bibliographie
    1. Standards
    2. Livres et articles
  39. Index
    1. A
    2. B
    3. C
    4. D
    5. E
    6. F
    7. G
    8. H
    9. I
    10. J
    11. K
    12. L
    13. M
    14. N
    15. O
    16. P
    17. Q
    18. R
    19. S
    20. T
    21. U
    22. V
    23. W
    24. X
    25. Y
    26. Z