|
|
Programmation système en C sous Linux
|
|
|
Il y a eu plusieurs tirages et plusieurs éditions de ce
livre. La première version (couverture bleue) a été publiée
en 2000.
|
|
Cette édition a ensuite
été ré-imprimée en 2002
avec de légères corrections (couverture blanche avec des moulins).
|
|
Dans la seconde édition (mention sur la couverture), parue en
2005, il y a eu des mises à jour significatives, concernant
des modifications de fonctionnalités du noyau Linux 2.6.
|
|
|
Suppléments
Cette archive au format tar+gz
contient l'ensemble du code source des exemples du livre.
Voici également les corrections concernant les différentes
versions de ce livre.
|
|
Sommaire
-
Avant-propos
-
Chapitre 1 - Concepts et outils
-
Généralités sur le développement sous Linux
-
Outils de développement
-
Éditeurs de texte
- Vi et Emacs
- Éditeurs Gnome ou Kde
- Nedit
-
Compilateur, éditeur de liens
-
Débogueur, profileur
-
Traitement du code source
- Vérificateur de code
- Mise en forme
- Utilitaires divers
-
Construction d'application
-
Distribution du logiciel
- Archive classique
- Paquetage à la manière Red Hat
-
Environnements de développement intégré
-
Contrôle de version
-
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 - La notion de processus
-
Présentation 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 - Accès à l'environnement
-
Variables d'environnement
-
Variables d'environnement couramment utilisées
-
Arguments en ligne de commande
-
Options simples - Posix.2
-
Options longues - Gnu
-
Exemple complet d'accès à l'environnement
-
Conclusion
-
Chapitre 4 - Exécution des programmes
-
Lancement d'un nouveau programme
-
Causes d'échec de lancement d'un programme
-
Fonctions simplifiées pour exécuter un sous-programme
-
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 - 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 - Appels-système lents
-
Réception des signaux avec l'appel-système signal()
-
Conclusion
-
Chapitre 7 - Gestion portable des signaux
-
Réception des signaux avec l'appel-système 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 8 - Signaux temps-réel Posix.1b
-
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 9 - Sommeil des processus et contrôle des ressources
-
Endormir un processus
-
Sommeil utilisant les temporisations de précision
-
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 - Entrées-sorties simplifiées
-
Flux standard d'un processus
-
Écriture formatée dans un flux
-
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 11 - Ordonnancement des processus
-
États d'un processus
-
Fonctionnement multitâche, priorités
-
Modification de la priorité d'un autre processus
-
Les mécanismes d'ordonnancement sous Linux
-
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 12 - Threads Posix.1c
-
Présentation
-
Implémentation
-
Création de threads
-
Attributs des threads
-
Déroulement et annulation d'un thread
-
Zones d'exclusions mutuelles
-
Attente de conditions
-
Sémaphores
-
Données privées d'un thread
-
Les threads et les signaux
-
Conclusion
-
Chapitre 13 - Gestion de la mémoire du processus
-
Routines classiques d'allocation et de libération
-
Utilisation de malloc()
-
Utilisation de calloc()
-
Utilisation de realloc()
-
Utilisation de free()
-
Règles de bonne conduite pour l'allocation
-
Désallocation automatique avec alloca()
-
Débogage des allocations mémoire
-
Configuration de l'algorithme utilisé par malloc()
-
Suivi intégré des allocations et des libérations
-
Surveillance automatique des zones allouées
-
Fonctions d'encadrement personnalisées
-
Conclusion
-
Chapitre 14 - 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 15 - Utilisation des blocs mémoire et des chaînes
-
Manipulation de blocs de mémoire
-
Mesures, copies et comparaisons de chaînes
-
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 16 - 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 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
-
Conclusion
-
Chapitre 18 - 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
-
Fichiers à trous
-
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 19 - 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 20 - 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 du shell
-
Descente récursive de répertoires
-
Conclusion
-
Chapitre 21 - Attributs des fichiers
-
Informations associées à un fichier
-
Autorisation d'accès
-
Propriétaire et groupe d'un fichier
-
Taille du fichier
-
Horodatages d'un fichier
-
Liens physiques
-
Liens symboliques
-
Noeud générique du système de fichiers
-
Masque de création de fichier
-
Conclusion
-
Chapitre 22 - Bases de données
-
Bases de données Unix DBM
-
Bases de données Unix NDBM
-
Bases de données Gnu GDBM
-
Bases de données DB Berkeley
-
Conclusion
-
Chapitre 23 - Types de données et conversions
-
Types de données génériques
-
Catégories de caractères
-
Conversion entre catégories de caractères
-
Conversions de données entre différents types
-
Caractères étendus
-
Caractères étendus et séquences multioctets
-
Conclusion
-
Chapitre 24 - Fonctions mathématiques
-
Fonctions trigonométriques et assimilées
-
Fonctions trigonométriques
-
Fonctions trigonométriques inverses
-
Fonctions connexes
-
Fonctions hyperboliques
-
Exponentielles, logarithmes, puissances et racines
-
Fonctions exponentielles
-
Fonctions logarithmiques
-
Puissances et racines
-
Calculs divers
-
Fonctions d'erreur
-
Fonction gamma
-
Fonctions de Bessel
-
Limites d'intervalles
-
Valeurs absolues et signes
-
Divisions entières, fractions, modulo
-
Infinis et erreurs
-
Valeur non numérique
-
Infinis
-
Représentation des réels en virgule flottante
-
Générateurs aléatoires
-
Générateur aléatoire du noyau
-
Générateur aléatoire de la bibliothèque C
-
Générateur aléatoire de la bibliothèque mathématique
-
Conclusion
-
Chapitre 25 - 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 26 - 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 27 - 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
-
Informations complètes avec nl_langinfo()
-
Conclusion
-
Chapitre 28 - Communications classiques entre processus
-
Les tubes
-
Les tubes nommés
-
Conclusion
-
Chapitre 29 - Communications avec les IPC Système V
-
Principes généraux des 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 30 - Entrées-sorties avancées
-
Entrées-sorties non bloquantes
-
Attente d'événements - Multiplexage d'entrées
-
Distribution de données - Multiplexage de sorties
-
Entrées-sorties asynchrones avec fcntl()
-
Entrées-sorties asynchrones Posix.1b
-
Écritures synchronisées
-
Conclusion
-
Chapitre 31 - Programmation réseau
-
Réseaux et couches de communication
-
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 32 - 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 33 - 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
-
Annexe 1 - Tables Ascii et ISO-8859-1
-
Annexe 2 - Fonctions et appels-système étudiés
-
Annexe 3 - Bibliographie
-
Livres et articles
-
Documents informatiques
|
|
|