Développement système sous Linux

Développement système sous Linux

Ce livre a été réédité plusieurs fois, avec diverses couvertures et mises à jour.

La dernière version, date de juillet 2016, il s’agit de la quatrième édition. C’est une mise à jour complète intégrant pour la première fois une bonne part d’exemples en Python en complément des nombreux exemples en langage C.

Exemples

Le code source des exemples du livre est disponible sur Github : https://github.com/cpb-/Developpement-systeme-sous-Linux

Pour les télécharger (avec l’historique des modifications) vous pouvez utiliser, la ligne de commande suivante :

   git clone https://github.com/cpb-/Developpement-systeme-sous-Linux

ou utilisez le bouton vert à droite « Clone or download » si vous souhaitez en obtenir une archive.

Commander sur Amazon

Le livre est disponible ici : Développement système sous linux

Précédentes versions

La version de janvier 2011 comportait d’improbables marmottes en couverture, il s’agissait de la troisième édition, une mise à jour comportant de nouveaux thèmes (programmation multiprocesseurs, IPC Posix, le système inotify, etc.)

Le code source des exemples de cette édition peut être trouvé ici.

L’édition précédente ( avec un TGV en couverture) datait de 2005. Il s’agissait d’une mise à niveau par rapport aux nouveautés du noyau 2.6

Développement Système sous Linux

La version précédente de ce livre (avec des moulins en couverture) était un re-tirage en 2002 de la première édition avec quelques mises à jours mineures.

Développement Système sous Linux

Enfin, la première édition datant de 2000 était vêtue de bleu… (sources des exemples)
Programmation Système sous Linux

Table des matières

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

15 Réponses

  1. ouadfel dit :

    ce livre est tres interressant pour moi

  2. Heero Yuy dit :

    J’ai la 2ème édition de ce livre depuis quelques années déjà, et il me sert énormément. Chaque fois que je me pose une question en C, je vais voir en premier dans ce livre.
    Et je me demande si dans un avenir proche, je n’achèterais pas la 3ème édition pour bénéficier des nouveautés 😉

    J’ai vu qu’un nouveau livre était en cours de rédaction. Je vous souhaite bon courage et souhaite à ce futur livre d’être un autre « best seller » dans le domaine de la programmation.

  3. Benoît dit :

    Bonjour,

    Je possède la version 2002 de ce livre. L’acquisition de la dernière n’est qu’une question de temps ;o).
    Pour m’eviter de tout relire, où pourrais-je trouver un recapitulatif des modifications entre les differentes éditions ?

    A++

  4. Fabien dit :

    Je suis étonné de voir que, plus d’un an après sa parution, ce livre n’est toujours pas disponible au format dématérialisé comme le PDF (tout du moins sur Izibook), à l’inverse de la deuxième édition. Est-ce voulu ? L’e-book est-il amené à paraître ?

    • cpb dit :

      Je ne suis pas au courant. Je vais me renseigner auprès de l’éditeur.

      • Fabien dit :

        Un petit message à Eyrolles a permis la réactivation de la disponibilité de l’ouvrage sur Izibook. Je ne sais pas ce qu’ils entendent par « réactivation », ni ce que peut sous-entendre le fait qu’il était « désactivé », mais le voici ajouté à ma collection 😉

  5. pierre dit :

    je ne me lasse pas de ce livre, c’est une bible..
    un petit errata à ajouter, à la page 683 (3iem édition), il faut ajouter un ‘s’ à mq_curmsg. (mq_curmsgs)

  6. Bonjour christophe,

    Ton livre est un ouvrage de référence pour moi.
    Cependant dans l’édition 3 j’ai noté que tu indiques toujours les fonctions gethostbyname, elle sont obsoletes ( et moins pratiques ) que getaddrinfo et getnameinfo.
    le man page de gethostbyname l’indique dans la description :
    The gethostbyname*(), gethostbyaddr*(), herror(), and hstrerror() functions are obsolete. Applications should use getaddrinfo(3), getnameinfo(3), and
    gai_strerror(3) instead.

    • cpb dit :

      Oui, c’est exact, les API évoluent et il est aujourd’hui préférable d’utiliser getaddrinfo() plutôt que gethostbyname(). Surtout pour les problèmes de réentrance multi-threads, je mettrai à jour ceci dans les prochaines éditions. Merci.

  7. Laurent Denat dit :

    Bonjour,

    petite erreur non notifiée dans les errata
    Dans le programme « exemple-aio-read » page 832, il n’y a pas l’inclusion de la bibliotheque pour la fonction open.

    Pour moi qui apprend seul, votre livre est une mine d’or
    Cordialement

    • cpb dit :

      Oui, en effet, il s’agit de fcntl.h. Je pense que lorsque j’ai rédigé cet exemple, le fichier aio.h devait l’inclure automatiquement. Aujourd’hui, les fichiers d’en-tête de la bibliothèque C ayant évolué, j’ai également une erreur de compilation.

      Merci beaucoup.

      • Laurent Denat dit :

        Merci beaucoup
        juste une derniere chose et ensuitej e ne vous ennuierai plus, vous dites page 840 ( cela peut differer, j’ai le livre en format electronique) a propos de la fonction aio_cancel(), je vous cite :
        « La routine aio_cancel() ne donnant aucune garantie de réussite et ne permettant pas de
        savoir si l’opération a réellement été annulée, elle n’a quasiment aucune utilité.  »

        Si on se refere au man au sujet de cette fonction il existe plusieurs codes de retour et d’erreur ( le -1 en cas d’erreur( seul code erreur EBADF en cas de mauvais descripteur),AIO_CANCELLED si reussite,AIO_NOTCANCELED et AIO_ALLDONE).

        Qu’el est pour vous le probleme au sujet de cette fonction ?

        Cordialement

  8. franck dit :

    la nouvelle edition 2016 est un veritable SCANDALE,
    le papier ‘c..’ utilisé est tellement fin que le livre est illisible, la transparence du verso
    empeche de lire le recto et c’est sans parler de convertion couleur n&b qui a mis des titres en niveau de gris tellement faible !!!

    que se passe t’il chez eyrolle

    vous ne me croyez pas –> allez verifier en librairie.

    c’est franchement dommage de se priver d’un aussi bon livre a cause de sa pietre impression.

    quand je pense que pour 2 euros on a des magazines en papier glacé couleurs

URL de trackback pour cette page