Accueil Formations Développements Documents Présentation Contact
Formations
• Programmer des scripts shell pour Unix et Linux
• Développement système sous Unix et Linux
• Écriture de drivers pour le noyau Linux
• Linux temps-réel et embarqué
Autres thèmes…
Logiciels
• Netpipe
• IP-multiserv
Autres logiciels…
Articles
• Linux : histoire d'un noyau
• Lancer une application au démarrage de Linux
• Sécuriser l'accès à une station Linux
Autres articles…
Documents
• Aides-mémoire Unix & Linux
• Manuel Linux en français
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
      • Sous-options
    • 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
Accueil | Contact | Mentions légales

Conception : Logilin - Formations Linux