
Ce livre a été réédité plusieurs fois, avec diverses couvertures et mises à jour.
La dernière version date de janvier 2011, il s’agit de la troisième édition avec d’improbables marmottes en couverture. Il s’agit d’une mise à jour complète comportant de nouveaux thèmes (programmation multiprocesseurs, IPC Posix, le système inotify, etc.)
Exemples
Le code source des exemples du livre est disponible ici.
Commander sur Amazon
Errata
- Page 179, il manque le mot « buffers » à la fin de la quatrième ligne.
- Page 181, il manque un espace entre
pthread_cond_tetcnd_donnees_bufferdans la première ligne de l’exemple. - Page 472, dans la fonction
b_insert(), il serait préférable de calculerbas + (haut-bas)/2plutôt que(bas+haut)/2pour éviter un débordement arithmétique si(bas+haut)> 2^32 (4,3 milliards environ). - Dans le programme «
exemple-shmat.c« , page 707, chapitre 24, il manque l’initialisation de la variabletable[]. Sur certaines versions de Linux cela conduit à une erreurERANGE(Numerical result out of range) lors de l’appel desemctl(). La correction a été apportée dans le code source ci-dessus.
Précédentes versions
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

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.

Enfin, la première édition datant de 2000 était vêtue de bleu… 
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
- Lancement d’un nouveau programme
- 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
- Variables d’environnement
- 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
- Terminaison d’un programme
- 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
- Réception des signaux avec sigaction()
- 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
- Caractéristiques des signaux temps-réel
- 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
- Allocation et libération de mémoire
- 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
- Types de données génériques
- 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
- Communications avec les IPC Posix
- 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
- Informations associées à un fichier
- 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
- Groupes et utilisateurs
- 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
3 Réponses
URL de trackback pour cette page
ce livre est tres interressant pour moi
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.
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++