{"id":87,"date":"2011-03-01T21:10:45","date_gmt":"2011-03-01T20:10:45","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/blog\/?page_id=87"},"modified":"2019-10-25T12:39:13","modified_gmt":"2019-10-25T11:39:13","slug":"programmation-systeme-sous-linux","status":"publish","type":"page","link":"https:\/\/www.blaess.fr\/christophe\/livres\/programmation-systeme-sous-linux\/","title":{"rendered":"D\u00e9veloppement syst\u00e8me sous Linux"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-5758\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2019\/10\/couverture-250x300.png\" alt=\"(couverture)\" width=\"250\" height=\"300\" \/>Ce livre a \u00e9t\u00e9 r\u00e9\u00e9dit\u00e9 plusieurs fois, avec diverses couvertures et mises \u00e0 jour.<\/p>\n<p style=\"text-align: justify;\">La derni\u00e8re version, date d&rsquo;octobre 2019, il s&rsquo;agit de la cinqui\u00e8me \u00e9dition, dont les exemples ont \u00e9t\u00e9 remis \u00e0 jour et modernis\u00e9s.<\/p>\n<h2>Exemples<\/h2>\n<p style=\"text-align: justify;\">Le <strong>code source<\/strong> des exemples du livre est disponible sur Github&nbsp;:\u00a0<a href=\"https:\/\/github.com\/cpb-\/Developpement-systeme-sous-Linux\">https:\/\/github.com\/cpb-\/Developpement-systeme-sous-Linux<\/a><\/p>\n<p style=\"text-align: justify;\">Pour les t\u00e9l\u00e9charger (avec l&rsquo;historique des modifications) vous pouvez utiliser, la ligne de commande suivante&nbsp;:<\/p>\n<p style=\"text-align: justify;\">\u00a0\u00a0 <strong><code>git clone https:\/\/github.com\/cpb-\/Developpement-systeme-sous-Linux<\/code><\/strong><\/p>\n<p style=\"text-align: justify;\">ou utilisez le bouton vert \u00e0 droite \u00ab\u00a0<em>Clone or download<\/em>\u00a0\u00bb si vous souhaitez en obtenir une archive.<\/p>\n<h2>Commander sur Amazon<\/h2>\n<p>Le livre est disponible ici&nbsp;: <a href=\"https:\/\/amzn.to\/3659scQ\" rel=\"nofollow\">D\u00e9veloppement syst\u00e8me sous linux<\/a><\/p>\n<h2>Pr\u00e9c\u00e9dentes versions<\/h2>\n<p style=\"text-align: justify;\">La version de juillet 2016 (4\u00e8me \u00e9dition) int\u00e9grait pour la premi\u00e8re fois une bonne part d&rsquo;exemples en Python en compl\u00e9ment des nombreux exemples en langage C.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4535 aligncenter\" src=\"https:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2019\/10\/pssl4-248x300.jpg\" alt=\"\"  width=\"165\" height=\"200\" \/><\/p>\n<p style=\"text-align: justify;\">La version de janvier 2011 comportait d\u2019improbables marmottes en couverture, il s\u2019agissait de la troisi\u00e8me \u00e9dition, une mise \u00e0 jour comportant de nouveaux th\u00e8mes (programmation multiprocesseurs, IPC Posix, le syst\u00e8me inotify, etc.)<\/p>\n<p style=\"text-align: justify;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4535 aligncenter\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/03\/livre-progsys-41-2.gif\" alt=\"\" width=\"165\" height=\"200\" \/><\/p>\n<p style=\"text-align: justify;\">Le code source des exemples de cette \u00e9dition peut \u00eatre <a href=\"http:\/\/www.blaess.fr\/christophe\/files\/Developpement-systeme-sous-Linux.tar.gz\">trouv\u00e9 ici<\/a>.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;\u00e9dition pr\u00e9c\u00e9dente ( avec un TGV en couverture) datait de 2005. Il s&rsquo;agissait d&rsquo;une mise \u00e0 niveau par rapport aux nouveaut\u00e9s du noyau 2.6<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-89 aligncenter\" title=\"D\u00e9veloppement Syst\u00e8me sous Linux\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/03\/livre-progsys-3.gif\" alt=\"D\u00e9veloppement Syst\u00e8me sous Linux\" width=\"165\" height=\"200\" \/><\/p>\n<p style=\"text-align: justify;\">La version pr\u00e9c\u00e9dente de ce livre (avec des moulins en couverture) \u00e9tait un re-tirage en 2002 de la premi\u00e8re \u00e9dition avec quelques mises \u00e0 jours mineures.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-90 aligncenter\" title=\"D\u00e9veloppement Syst\u00e8me sous Linux\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/03\/livre-progsys-2.gif\" alt=\"D\u00e9veloppement Syst\u00e8me sous Linux\" width=\"165\" height=\"200\" \/><\/p>\n<p>Enfin, la premi\u00e8re \u00e9dition datant de 2000 \u00e9tait v\u00eatue de bleu&#8230; (<a title=\"D\u00e9veloppement Syst\u00e8me sous Linux\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/livres\/pssl\/edition-1\/prog_linux.tar.gz\">sources des exemples<\/a>)<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-91 aligncenter\" title=\"Programmation Syst\u00e8me sous Linux\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/03\/livre-progsys-1.gif\" alt=\"Programmation Syst\u00e8me sous Linux\" width=\"165\" height=\"200\" \/><\/p>\n<h2>Table des mati\u00e8res<\/h2>\n<ul>\n<li><strong>CHAPITRE 1 &#8211; Concepts et outils<\/strong>\n<ul>\n<li>G\u00e9n\u00e9ralit\u00e9s sur le d\u00e9veloppement sous Linux<\/li>\n<li>Outils de d\u00e9veloppement\n<ul>\n<li>Eclipse<\/li>\n<li>NetBeans<\/li>\n<li>\u00c9diteurs de texte\n<ul>\n<li>Vi et Emacs<\/li>\n<li>\u00c9diteurs Gnome ou Kde<\/li>\n<li>Nedit<\/li>\n<\/ul>\n<\/li>\n<li>Compilateur, \u00e9diteur de liens<\/li>\n<li>D\u00e9bogueur, profileur\n<ul>\n<li>Valgrind<\/li>\n<li>Gprof<\/li>\n<\/ul>\n<\/li>\n<li>Traitement du code source\n<ul>\n<li>V\u00e9rificateur de code<\/li>\n<li>Mise en forme<\/li>\n<\/ul>\n<\/li>\n<li>Utilitaires divers<\/li>\n<li>Construction d\u2019application<\/li>\n<li>Distribution du logiciel<\/li>\n<\/ul>\n<\/li>\n<li>Biblioth\u00e8ques suppl\u00e9mentaires pour le d\u00e9veloppement\n<ul>\n<li>Interface utilisateur en mode texte<\/li>\n<li>D\u00e9veloppement sous X-Window<\/li>\n<li>Les environnements Kde et Gnome<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 2 &#8211; Les processus<\/strong>\n<ul>\n<li>Principe des processus<\/li>\n<li>Identification par le PID<\/li>\n<li>Identification de l\u2019utilisateur correspondant au processus<\/li>\n<li>Identification du groupe d\u2019utilisateurs du processus<\/li>\n<li>Identification du groupe de processus<\/li>\n<li>Identification de session<\/li>\n<li>Capacit\u00e9s d\u2019un processus<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 3 &#8211; Ex\u00e9cution d\u2019un programme<\/strong>\n<ul>\n<li>Lancement d\u2019un nouveau programme\n<ul>\n<li>Causes d\u2019\u00e9chec de lancement d\u2019un programme<\/li>\n<li>Fonctions simplifi\u00e9es pour ex\u00e9cuter un sous-programme<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 4 -Environnement et ligne de commande<\/strong>\n<ul>\n<li>Variables d\u2019environnement\n<ul>\n<li>Variables d\u2019environnement couramment utilis\u00e9es<\/li>\n<\/ul>\n<\/li>\n<li>Arguments en ligne de commande\n<ul>\n<li>Options simples \u2013 SUSv4<\/li>\n<li>Options longues \u2013 Gnu<\/li>\n<li>Sous-options<\/li>\n<\/ul>\n<\/li>\n<li>Exemple complet d\u2019acc\u00e8s \u00e0 l\u2019environnement<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 5 &#8211; Fin d\u2019un programme<\/strong>\n<ul>\n<li>Terminaison d\u2019un programme\n<ul>\n<li>Terminaison normale d\u2019un processus<\/li>\n<li>Terminaison anormale d\u2019un processus<\/li>\n<\/ul>\n<\/li>\n<li>Ex\u00e9cution automatique de routines de terminaison<\/li>\n<li>Attendre la fin d\u2019un processus fils\n<ul>\n<li>Signaler une erreur<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 6 &#8211; D\u00e9roulement des Pthreads<\/strong>\n<ul>\n<li>Pr\u00e9sentation<\/li>\n<li>Impl\u00e9mentation<\/li>\n<li>Cr\u00e9ation de threads\n<ul>\n<li>Passage d\u2019argument \u00e0 la cr\u00e9ation d\u2019un thread<\/li>\n<li>Partage d\u2019espace m\u00e9moire<\/li>\n<\/ul>\n<\/li>\n<li>Fin d\u2019un thread\n<ul>\n<li>\u00c9limination d\u2019un thread<\/li>\n<li>R\u00e9cup\u00e9ration de la valeur de retour<\/li>\n<li>D\u00e9tachement des threads<\/li>\n<\/ul>\n<\/li>\n<li>Attributs des threads<\/li>\n<li>Synchronisation entre threads\n<ul>\n<li>Les mutex<\/li>\n<li>Verrous R\/W locks<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 7 &#8211; Aspects avanc\u00e9s des Pthreads<\/strong>\n<ul>\n<li>Annulation d\u2019un thread<\/li>\n<li>Fonctions de nettoyage<\/li>\n<li>Variables conditions<\/li>\n<li>Types de mutex<\/li>\n<li>Taille de la pile<\/li>\n<li>Appel de fork()<\/li>\n<li>Donn\u00e9es globales priv\u00e9es<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 8 &#8211; Fonctions horaires<\/strong>\n<ul>\n<li>Horodatage et type time_t<\/li>\n<li>Lecture de l\u2019heure<\/li>\n<li>Configuration de l\u2019heure syst\u00e8me<\/li>\n<li>Conversions, affichages de dates et d\u2019heures<\/li>\n<li>Calcul d\u2019intervalles<\/li>\n<li>Fuseau horaire<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 9 &#8211; Sommeil des processus et contr\u00f4le des ressources<\/strong>\n<ul>\n<li>Endormir un processus<\/li>\n<li>Utilisation des temporisations<\/li>\n<li>Timers temps-r\u00e9el<\/li>\n<li>Suivre l\u2019ex\u00e9cution d\u2019un processus<\/li>\n<li>Obtenir des statistiques sur un processus<\/li>\n<li>Limiter les ressources consomm\u00e9es par un processus<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 10 &#8211; Ordonnancements sous Linux<\/strong>\n<ul>\n<li>\u00c9tats d\u2019un processus<\/li>\n<li>Fonctionnement multit\u00e2che, priorit\u00e9s\n<ul>\n<li>Modification de la priorit\u00e9 d\u2019un autre processus<\/li>\n<\/ul>\n<\/li>\n<li>Syst\u00e8mes multiprocesseurs, migrations\n<ul>\n<li>Consultation du processeur utilis\u00e9<\/li>\n<li>Choix des processeurs autoris\u00e9s pour une t\u00e2che<\/li>\n<\/ul>\n<\/li>\n<li>Ordonnancements temps-r\u00e9el\n<ul>\n<li>Ordonnancement sous algorithme FIFO<\/li>\n<li>Ordonnancement sous algorithme RR<\/li>\n<li>Ordonnancement sous algorithme OTHER<\/li>\n<li>R\u00e9capitulation<\/li>\n<li>Temps-r\u00e9el&nbsp;?<\/li>\n<li>Modification de la politique d\u2019ordonnancement<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 11 &#8211; Gestion classique des signaux<\/strong>\n<ul>\n<li>G\u00e9n\u00e9ralit\u00e9s<\/li>\n<li>Liste des signaux sous Linux\n<ul>\n<li>Signaux SIGABRT et SIGIOT<\/li>\n<li>Signaux SIGALRM, SIGVTALRM et SIGPROF<\/li>\n<li>Signaux SIGBUS et SIGSEGV<\/li>\n<li>Signaux SIGCHLD et SIGCLD<\/li>\n<li>Signaux SIGFPE et SIGSTKFLT<\/li>\n<li>Signal SIGHUP<\/li>\n<li>Signal SIGILL<\/li>\n<li>Signal SIGINT<\/li>\n<li>Signaux SIGIO et SIGPOLL<\/li>\n<li>Signal SIGKILL<\/li>\n<li>Signal SIGPIPE<\/li>\n<li>Signal SIGQUIT<\/li>\n<li>Signaux SIGSTOP, SIGCONT, et SIGTSTP<\/li>\n<li>Signal SIGTERM<\/li>\n<li>Signal SIGTRAP<\/li>\n<li>Signaux SIGTTIN et SIGTTOU<\/li>\n<li>Signal SIGURG<\/li>\n<li>Signaux SIGUSR1 et SIGUSR2<\/li>\n<li>Signal SIGWINCH<\/li>\n<li>Signaux SIGXCPU et SIGXFSZ<\/li>\n<li>Signaux temps-r\u00e9el<\/li>\n<\/ul>\n<\/li>\n<li>\u00c9mission d\u2019un signal sous Linux<\/li>\n<li>D\u00e9livrance des signaux\n<ul>\n<li>R\u00e9ception des signaux avec l\u2019appel syst\u00e8me signal()<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 12 &#8211; Gestion portable des signaux<\/strong>\n<ul>\n<li>R\u00e9ception des signaux avec sigaction()\n<ul>\n<li>Configuration des ensembles de signaux<\/li>\n<li>Exemples d\u2019utilisation de sigaction()<\/li>\n<\/ul>\n<\/li>\n<li>Blocage des signaux<\/li>\n<li>Attente d\u2019un signal\n<ul>\n<li>\u00c9criture correcte d\u2019un gestionnaire de signaux<\/li>\n<li>Utilisation d\u2019un saut non local<\/li>\n<\/ul>\n<\/li>\n<li>Un signal particulier&nbsp;: l\u2019alarme<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 13 &#8211; Signaux temps-r\u00e9el<\/strong>\n<ul>\n<li>Caract\u00e9ristiques des signaux temps-r\u00e9el\n<ul>\n<li>Nombre de signaux temps-r\u00e9el<\/li>\n<li>Empilement des signaux bloqu\u00e9s<\/li>\n<li>D\u00e9livrance prioritaire des signaux<\/li>\n<li>Informations suppl\u00e9mentaires fournies au gestionnaire<\/li>\n<\/ul>\n<\/li>\n<li>\u00c9mission d\u2019un signal temps-r\u00e9el<\/li>\n<li>Traitement rapide des signaux temps-r\u00e9el<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 14 &#8211; Gestion de la m\u00e9moire du processus<\/strong>\n<ul>\n<li>Allocation et lib\u00e9ration de m\u00e9moire\n<ul>\n<li>Utilisation de malloc()<\/li>\n<li>Utilisation de calloc()<\/li>\n<li>Utilisation de realloc()<\/li>\n<li>Utilisation de free()<\/li>\n<li>R\u00e8gles de bonne conduite pour l\u2019allocation et la lib\u00e9ration de m\u00e9moire<\/li>\n<li>D\u00e9sallocation automatique avec alloca()<\/li>\n<\/ul>\n<\/li>\n<li>D\u00e9bogage des allocations m\u00e9moire\n<ul>\n<li>Configuration de l\u2019algorithme utilis\u00e9 par malloc()<\/li>\n<li>Suivi des allocations et des lib\u00e9rations\n<ul>\n<li>Surveillance automatique des zones allou\u00e9es<\/li>\n<li>Fonctions d\u2019encadrement personnalis\u00e9es<\/li>\n<\/ul>\n<\/li>\n<li>Utilisation de Valgrind<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 15 &#8211; Gestion avanc\u00e9e de la m\u00e9moire<\/strong>\n<ul>\n<li>Verrouillage de pages en m\u00e9moire<\/li>\n<li>Projection d\u2019un fichier sur une zone m\u00e9moire<\/li>\n<li>Protection de l\u2019acc\u00e8s \u00e0 la m\u00e9moire<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 16 &#8211; Utilisation des blocs m\u00e9moire et des cha\u00eenes<\/strong>\n<ul>\n<li>Manipulation de blocs de m\u00e9moire<\/li>\n<li>Mesures, copies et comparaisons de cha\u00eenes<\/li>\n<li>Caract\u00e8res accentu\u00e9s et codage UTF-8<\/li>\n<li>Recherches dans une zone de m\u00e9moire ou dans une cha\u00eene\n<ul>\n<li>Recherche dans un bloc de m\u00e9moire<\/li>\n<li>Recherche de caract\u00e8res dans une cha\u00eene<\/li>\n<li>Recherche de sous-cha\u00eenes<\/li>\n<li>Analyse lexicale<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 17 &#8211; Tris, recherches et structuration des donn\u00e9es<\/strong>\n<ul>\n<li>Fonctions de comparaison<\/li>\n<li>Recherche lin\u00e9aire, donn\u00e9es non tri\u00e9es<\/li>\n<li>Recherches dichotomiques dans une table ordonn\u00e9e<\/li>\n<li>Manipulation, exploration et parcours d\u2019un arbre binaire<\/li>\n<li>Gestion d\u2019une table de hachage<\/li>\n<li>R\u00e9capitulatif sur les m\u00e9thodes d\u2019acc\u00e8s aux donn\u00e9es\n<ul>\n<li>Recherche lin\u00e9aire, table non tri\u00e9e<\/li>\n<li>Recherche dichotomique, table tri\u00e9e<\/li>\n<li>Arbre binaire.<\/li>\n<li>Table de hachage<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 18 &#8211; Routines avanc\u00e9es de traitement des blocs m\u00e9moire<\/strong>\n<ul>\n<li>Utilisation des expressions rationnelles<\/li>\n<li>Cryptage de donn\u00e9es\n<ul>\n<li>Cryptage \u00e9l\u00e9mentaire<\/li>\n<li>Cryptage simple et mots de passe<\/li>\n<li>Cryptage de blocs de m\u00e9moire avec DES<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 19 &#8211; Types de donn\u00e9es et conversions<\/strong>\n<ul>\n<li>Types de donn\u00e9es g\u00e9n\u00e9riques\n<ul>\n<li>Cat\u00e9gories de caract\u00e8res<\/li>\n<li>Conversions entre cat\u00e9gories de caract\u00e8res<\/li>\n<\/ul>\n<\/li>\n<li>Conversions entre diff\u00e9rents types<\/li>\n<li>Types et conversions math\u00e9matiques\n<ul>\n<li>Nombres complexes<\/li>\n<li>Conversions de r\u00e9els en entiers<\/li>\n<li>Infinis et erreurs\n<ul>\n<li>Valeur non num\u00e9rique<\/li>\n<li>Infinis.<\/li>\n<\/ul>\n<\/li>\n<li>Repr\u00e9sentation des r\u00e9els en virgule flottante<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 20 &#8211; Entr\u00e9es-sorties simplifi\u00e9es<\/strong>\n<ul>\n<li>Flux standard d\u2019un processus<\/li>\n<li>\u00c9critures dans un flux\n<ul>\n<li>\u00c9critures format\u00e9es<\/li>\n<li>Autres fonctions d\u2019\u00e9criture format\u00e9e<\/li>\n<li>\u00c9critures simples de caract\u00e8res ou de cha\u00eenes<\/li>\n<\/ul>\n<\/li>\n<li>Saisie de caract\u00e8res\n<ul>\n<li>R\u00e9injection de caract\u00e8re<\/li>\n<li>Saisie de cha\u00eenes de caract\u00e8res<\/li>\n<li>Lectures format\u00e9es depuis un flux<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 21 &#8211; Flux de donn\u00e9es<\/strong>\n<ul>\n<li>Diff\u00e9rences entre flux et descripteurs<\/li>\n<li>Ouverture et fermeture d\u2019un flux\n<ul>\n<li>Ouverture normale d\u2019un flux<\/li>\n<\/ul>\n<\/li>\n<li>Fermeture d\u2019un flux<\/li>\n<li>Pr\u00e9sentation des buffers associ\u00e9s aux flux<\/li>\n<li>Ouvertures particuli\u00e8res de flux<\/li>\n<li>Lectures et \u00e9critures dans un flux<\/li>\n<li>Positionnement dans un flux\n<ul>\n<li>Positionnement classique<\/li>\n<li>Positionnement compatible Unix 98<\/li>\n<\/ul>\n<\/li>\n<li>Probl\u00e8mes de portabilit\u00e9<\/li>\n<li>Param\u00e9trage des buffers associ\u00e9s \u00e0 un flux\n<ul>\n<li>Type de buffers<\/li>\n<li>Modification du type et de la taille du buffer<\/li>\n<\/ul>\n<\/li>\n<li>\u00c9tat d\u2019un flux<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 22 &#8211; Descripteurs de fichiers<\/strong>\n<ul>\n<li>Ouverture et fermeture d\u2019un descripteur de fichier<\/li>\n<li>Lecture ou \u00e9criture sur un descripteur de fichier\n<ul>\n<li>Primitives de lecture<\/li>\n<li>Primitives d\u2019\u00e9criture<\/li>\n<\/ul>\n<\/li>\n<li>Positionnement dans un descripteur de fichier<\/li>\n<li>Manipulation et duplication de descripteurs\n<ul>\n<li>Duplication de descripteur<\/li>\n<li>Acc\u00e8s aux attributs du descripteur<\/li>\n<li>Attributs du fichier<\/li>\n<\/ul>\n<\/li>\n<li>Verrouillage d\u2019un descripteur\n<ul>\n<li>Autre m\u00e9thode de verrouillage<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 23 &#8211; Communications classiques entre processus<\/strong>\n<ul>\n<li>Les tubes<\/li>\n<li>Les tubes nomm\u00e9s<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 24 &#8211; Communications avec les IPC<\/strong>\n<ul>\n<li>Communications avec les IPC Posix\n<ul>\n<li>Files de messages<\/li>\n<li>M\u00e9moire partag\u00e9e<\/li>\n<li>S\u00e9maphores<\/li>\n<li>Administration des ressources existantes<\/li>\n<\/ul>\n<\/li>\n<li>Les m\u00e9canismes IPC Syst\u00e8me V\n<ul>\n<li>Obtention d\u2019une cl\u00e9<\/li>\n<li>Ouverture de l\u2019IPC<\/li>\n<li>Contr\u00f4le et param\u00e9trage<\/li>\n<li>Files de messages<\/li>\n<li>M\u00e9moire partag\u00e9e<\/li>\n<li>S\u00e9maphores<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 25 &#8211; Entr\u00e9es-sorties avanc\u00e9es<\/strong>\n<ul>\n<li>Entr\u00e9es-sorties non bloquantes<\/li>\n<li>Multiplexage d\u2019entr\u00e9es-sorties\n<ul>\n<li>Attente d\u2019\u00e9v\u00e9nements \u2013 Multiplexage d\u2019entr\u00e9es<\/li>\n<li>Distribution de donn\u00e9es \u2013 Multiplexage de sorties<\/li>\n<\/ul>\n<\/li>\n<li>Entr\u00e9es-sorties asynchrones\n<ul>\n<li>Asynchronisme utilisant fcntl()<\/li>\n<li>Asynchronisme compatible Posix.1b<\/li>\n<\/ul>\n<\/li>\n<li>\u00c9critures synchronis\u00e9es<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 26 &#8211; Programmation r\u00e9seau<\/strong>\n<ul>\n<li>R\u00e9seaux et couches de communication<\/li>\n<li>R\u00e9solution de nom\n<ul>\n<li>Noms des protocoles<\/li>\n<li>Ordre des octets<\/li>\n<li>Services et num\u00e9ros de ports<\/li>\n<\/ul>\n<\/li>\n<li>Manipulation des adresses IP\n<ul>\n<li>Noms d\u2019h\u00f4tes et noms de r\u00e9seaux<\/li>\n<li>Gestion des erreurs<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 27 &#8211; Utilisation des sockets<\/strong>\n<ul>\n<li>Concept de socket<\/li>\n<li>Cr\u00e9ation d\u2019une socket<\/li>\n<li>Affectation d\u2019adresse<\/li>\n<li>Mode connect\u00e9 et mode non connect\u00e9<\/li>\n<li>Attente de connexions<\/li>\n<li>Demander une connexion<\/li>\n<li>Fermeture d\u2019une socket<\/li>\n<li>Recevoir ou envoyer des donn\u00e9es<\/li>\n<li>Acc\u00e8s aux options des sockets<\/li>\n<li>Programmation d\u2019un d\u00e9mon ou utilisation de inetd<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 28 &#8211; Acc\u00e8s au contenu des r\u00e9pertoires<\/strong>\n<ul>\n<li>Lecture du contenu d\u2019un r\u00e9pertoire<\/li>\n<li>Changement de r\u00e9pertoire de travail\n<ul>\n<li>Changement de r\u00e9pertoire racine<\/li>\n<\/ul>\n<\/li>\n<li>Cr\u00e9ation et suppression de r\u00e9pertoire<\/li>\n<li>Suppression ou d\u00e9placement de fichiers<\/li>\n<li>Fichiers temporaires<\/li>\n<li>Recherche de noms de fichiers\n<ul>\n<li>Correspondance simple d\u2019un nom de fichier<\/li>\n<li>Recherche sur un r\u00e9pertoire total<\/li>\n<li>D\u00e9veloppement complet \u00e0 la mani\u00e8re d\u2019un shell\n<ul>\n<li>D\u00e9veloppement du tilde<\/li>\n<li>Substitution des variables<\/li>\n<li>\u00c9valuation arithm\u00e9tique et ex\u00e9cution de commande<\/li>\n<li>D\u00e9coupage des mots et d\u00e9veloppement des noms de fichiers.<\/li>\n<\/ul>\n<\/li>\n<li>Descente r\u00e9cursive de r\u00e9pertoires<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 29 &#8211; Attributs des fichiers<\/strong>\n<ul>\n<li>Informations associ\u00e9es \u00e0 un fichier\n<ul>\n<li>Autorisations d\u2019acc\u00e8s<\/li>\n<li>Propri\u00e9taire et groupe d\u2019un fichier<\/li>\n<\/ul>\n<\/li>\n<li>Taille du fichier<\/li>\n<li>Horodatages d\u2019un fichier<\/li>\n<li>Liens physiques<\/li>\n<li>Liens symboliques<\/li>\n<li>N\u0153ud g\u00e9n\u00e9rique du syst\u00e8me de fichiers<\/li>\n<li>Masque de cr\u00e9ation de fichier<\/li>\n<li>Surveillance du syst\u00e8me de fichiers<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 30 &#8211; Acc\u00e8s aux informations du syst\u00e8me<\/strong>\n<ul>\n<li>Groupes et utilisateurs\n<ul>\n<li>Fichier des groupes<\/li>\n<li>Fichier des utilisateurs<\/li>\n<li>Fichier des interpr\u00e9teurs shell<\/li>\n<\/ul>\n<\/li>\n<li>Nom d\u2019h\u00f4te et de domaine\n<ul>\n<li>Nom d\u2019h\u00f4te<\/li>\n<li>Nom de domaine<\/li>\n<li>Identifiant d\u2019h\u00f4te<\/li>\n<\/ul>\n<\/li>\n<li>Informations sur le noyau\n<ul>\n<li>Identification du noyau<\/li>\n<li>Informations sur l\u2019\u00e9tat du noyau<\/li>\n<\/ul>\n<\/li>\n<li>Syst\u00e8me de fichiers\n<ul>\n<li>Caract\u00e9ristiques des syst\u00e8mes de fichiers<\/li>\n<li>Informations sur un syst\u00e8me de fichiers<\/li>\n<li>Montage et d\u00e9montage des partitions<\/li>\n<\/ul>\n<\/li>\n<li>Journalisation\n<ul>\n<li>Journal utmp<\/li>\n<li>Fonctions X\/Open<\/li>\n<li>Journal wtmp<\/li>\n<li>Journal syslog<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 31 &#8211; Internationalisation<\/strong>\n<ul>\n<li>Principe<\/li>\n<li>Cat\u00e9gories de localisations disponibles<\/li>\n<li>Traduction de messages\n<ul>\n<li>Catalogues de messages g\u00e9r\u00e9s par catgets()<\/li>\n<li>Catalogues de messages Gnu GetText<\/li>\n<\/ul>\n<\/li>\n<li>Configuration de la localisation\n<ul>\n<li>Localisation et fonctions de biblioth\u00e8ques<\/li>\n<li>Localisation et fonctions personnelles\n<ul>\n<li>Informations num\u00e9riques et mon\u00e9taires avec localeconv()<\/li>\n<li>Informations compl\u00e8tes avec nl_langinfo()<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>CHAPITRE 32 &#8211; Gestion du terminal<\/strong>\n<ul>\n<li>D\u00e9finition des terminaux<\/li>\n<li>Configuration d\u2019un terminal\n<ul>\n<li>Membre c_iflag de la structure termios<\/li>\n<li>Membre c_oflag de la structure termios<\/li>\n<li>Membre c_cflag de la structure termios<\/li>\n<li>Membre c_lflag de la structure termios<\/li>\n<li>Membre c_cc[] de la structure termios<\/li>\n<li>Basculement du terminal en mode brut<\/li>\n<\/ul>\n<\/li>\n<li>Connexion \u00e0 distance sur une socket\n<ul>\n<li>Utilisation d\u2019un pseudo-terminal<\/li>\n<\/ul>\n<\/li>\n<li>Configuration d\u2019un port s\u00e9rie RS-232<\/li>\n<li>Conclusion<\/li>\n<\/ul>\n<\/li>\n<li><strong>Bibliographie<\/strong>\n<ul>\n<li>Standards<\/li>\n<li>Livres et articles<\/li>\n<\/ul>\n<\/li>\n<li><strong>Index<\/strong><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>&nbsp; Ce livre a &eacute;t&eacute; r&eacute;&eacute;dit&eacute; plusieurs fois, avec diverses couvertures et mises &agrave; jour. La derni&egrave;re version, date d&rsquo;octobre 2019, il s&rsquo;agit de la cinqui&egrave;me &eacute;dition, dont les exemples ont &eacute;t&eacute; remis &agrave; jour et modernis&eacute;s. Exemples Le code source des exemples du livre est disponible sur Github&nbsp;:&nbsp;https:\/\/github.com\/cpb-\/Developpement-systeme-sous-Linux Pour les t&eacute;l&eacute;charger (avec l&rsquo;historique des [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":15,"menu_order":3,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-87","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":28,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/87\/revisions"}],"predecessor-version":[{"id":5765,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/87\/revisions\/5765"}],"up":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/pages\/15"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}