• Aide
  • Eurêkoi Eurêkoi

Livre

Développement système sous Linux :

Résumé

Présentation de l'interface de programmation offerte par Linux, des possibilités proposées par les appels systèmes du noyau et des fonctions implémentées dans la bibliothèque GlibC. Cet ouvrage permet à tout programmeur C d'écrire pour Linux des applications robustes, performantes et portables vers les autres systèmes Unix. ©Electre 2019


  • Éditeur(s)
  • Date
    • DL 2019
  • Notes
    • La couv. porte en plus : "Ordonnancement multitâche, gestion mémoire, communications, programmation réseau"
  • Langues
    • Français
  • Description matérielle
    • 1 vol. (XIX-1051 p.) : ill. ; 24 cm
  • Collections
  • Sujet(s)
  • ISBN
    • 978-2-212-67760-7
  • Indice
    • 681.44 Systèmes d'exploitation Unix, Linux
  • Quatrième de couverture
    • Tirer le meilleur parti de l'environnement Linux

      La possibilité de consulter les sources du système, de la bibliothèque glibc et de la plupart des applications qui tournent sur cet environnement représente une richesse inestimable aussi bien pour les passionnés qui souhaitent intervenir sur le noyau, que pour les développeurs curieux de comprendre comment fonctionnent les programmes qu'ils utilisent quotidiennement.

      Nombreuses sont les entreprises qui ont compris aujourd'hui tout le parti qu'elles pouvaient tirer de cette ouverture des sources, gage de fiabilité et de pérennité, sans parler de l'extraordinaire niveau de compétences disponible au sein d'une communauté de programmeurs aguerris au contact du code des meilleurs développeurs open source.

      Un ouvrage conçu pour les programmeurs Linux et Unix les plus exigeants

      Sans équivalent en langue française, l'ouvrage de Christophe Blaess constitue une référence complète du développement système sous Linux, y compris dans les aspects les plus avancés de la gestion des processus, des threads ou de la mémoire. Les programmeurs travaillant sous d'autres environnements Unix apprécieront tout particulièrement l'attachement de l'auteur au respect des standards (C Ansi, glibc, Posix...), garant d'une bonne portabilité des applications. Cette cinquième édition a été entièrement revue et mise à jour pour s'adapter aux standards actuels. Elle s'est en outre étoffée d'un nouveau chapitre sur l'accès aux entrées-sorties GPIO, particulièrement employées dans les systèmes industriels et embarqués.


  • Tables des matières
      • Développement système sous Linux

      • Christophe Blaess

      • Eyrolles

      • Chapitre 1
        Concepts et outils1
      • Généralités sur le développement sous Linux1
      • Outils de développement4
      • Eclipse5
      • NetBeans6
      • Programmation en Python7
      • Éditeurs de texte8
      • Compilateur, éditeur de liens10
      • Débogueur, profileur13
      • Traitement du code source20
      • Suivi de versions23
      • Construction d'application24
      • Distribution du logiciel25
      • Bibliothèques supplémentaires pour le développement26
      • Interface utilisateur en mode texte26
      • Développement graphique27
      • Conclusion27
      • Chapitre 2
        Les processus29
      • Principe des processus29
      • Identification par le PID32
      • Identification de l'utilisateur correspondant au processus36
      • Identification du groupe d'utilisateurs du processus44
      • Identification du groupe de processus48
      • Identification de session52
      • Capacités d'un processus55
      • Conclusion59
      • Chapitre 3
        Exécution d'un programme61
      • Lancement d'un nouveau programme61
      • Causes d'échec de lancement d'un programme70
      • Fonctions simplifiées pour exécuter un sous-programme73
      • Conclusion83
      • Chapitre 4
        Environnement et ligne de commande85
      • Variables d'environnement86
      • Variables d'environnement couramment utilisées94
      • Arguments en ligne de commande97
      • Options simples - SUSv499
      • Options longues - Gnu101
      • Sous-options105
      • Exemple complet d'accès à l'environnement106
      • Conclusion114
      • Chapitre 5
        Fin d'un programme115
      • Terminaison d'un programme115
      • Terminaison normale d'un processus115
      • Terminaison anormale d'un processus120
      • Exécution automatique de routines de terminaison123
      • Attendre la fin d'un processus enfant128
      • Signaler une erreur139
      • Conclusion148
      • Chapitre 6
        Déroulement des Pthreads149
      • Présentation150
      • Implémentation150
      • Création de threads152
      • Passage d'argument à la création d'un thread156
      • Partage d'espace mémoire159
      • Fin d'un thread161
      • Élimination d'un thread164
      • Récupération de la valeur de retour165
      • Détachement des threads167
      • Attributs des threads169
      • Synchronisation entre threads171
      • Les mutex172
      • Verrous R/W locks176
      • Conclusion177
      • Chapitre 7
        Aspects avancés des Pthreads179
      • Annulation d'un thread179
      • Fonctions de nettoyage184
      • Variables conditions186
      • Types de mutex191
      • Mutex partagés et robustesse des mutex196
      • Taille de la pile197
      • Données globales privées198
      • Conclusion199
      • Chapitre 8
        Fonctions horaires201
      • Horodatage et type time_t202
      • Lecture de l'heure203
      • Configuration de l'heure système209
      • Conversions, affichages de dates et d'heures211
      • Calcul d'intervalles225
      • Fuseau horaire227
      • Conclusion230
      • Chapitre 9
        Sommeil des processus et contrôle des ressources231
      • Endormir un processus231
      • Utilisation des temporisations Unix238
      • Timers temps réel243
      • Notifications par descripteur247
      • Suivre l'exécution d'un processus249
      • Obtenir des statistiques sur un processus253
      • Limiter les ressources consommées par un processus256
      • Conclusion264
      • Chapitre 10
        Ordonnancements sous Linux265
      • États d'une tâche265
      • Fonctionnement multitâche, priorités270
      • Modification de la priorité d'un autre processus276
      • Systèmes multiprocesseurs, migrations279
      • Consultation du processeur utilisé279
      • Choix des processeurs autorisés pour une tâche281
      • Ordonnancements temps réel284
      • Ordonnancement sous algorithme FIFO286
      • Ordonnancement sous algorithme RR287
      • Ordonnancement sous algorithme OTHER288
      • Récapitulation288
      • Temps Réel ?289
      • Modification de la politique d'ordonnancement290
      • Conclusion292
      • Chapitre 11
        Gestion classique des signaux293
      • Généralités293
      • Liste des signaux sous Linux295
      • Signaux SIGABRT et SIGIOT295
      • Signaux SIGALRM, SIGVTALRM et SIGPROF296
      • Signaux SIGBUS et SIGSEGV297
      • Signaux SIGCHLD et SIGCLD297
      • Signaux SIGFPE et SIGSTKFLT298
      • Signal SIGHUP299
      • Signal SIGILL299
      • Signal SIGINT300
      • Signaux SIGIO et SIGPOLL301
      • Signal SIGKILL301
      • Signal SIGPIPE302
      • Signal SIGQUIT302
      • Signaux SIGSTOP, SIGCONT, et SIGTSTP302
      • Signal SIGTERM303
      • Signal SIGTRAP303
      • Signaux SIGTTIN et SIGTTOU303
      • Signal SIGURG304
      • Signaux SIGUSR1 et SIGUSR2304
      • Signal SIGWINCH305
      • Signaux SIGXCPU et SIGXFSZ305
      • Signaux temps réel306
      • Émission d'un signal sous Linux309
      • Délivrance des signaux311
      • Réception des signaux avec l'appel système signal()313
      • Conclusion324
      • Chapitre 12
        Gestion portable des signaux325
      • Réception des signaux avec sigaction ()325
      • Configuration des ensembles de signaux329
      • Exemples d'utilisation de sigaction ()330
      • Blocage des signaux337
      • Attente d'un signal342
      • Écriture correcte d'un gestionnaire de signaux344
      • Utilisation d'un saut non local347
      • Un signal particulier : l'alarme350
      • Conclusion354
      • Chapitre 13
        Signaux temps réel355
      • Caractéristiques des signaux temps réel356
      • Nombre de signaux temps réel356
      • Empilement des signaux bloqués357
      • Délivrance prioritaire des signaux358
      • Informations supplémentaires fournies au gestionnaire359
      • Émission d'un signal temps réel360
      • Traitement rapide des signaux temps réel368
      • Conclusion373
      • Chapitre 14
        Gestion de la mémoire du processus375
      • Allocation et libération de mémoire375
      • Utilisation de malloc()376
      • Utilisation de calloc()383
      • Utilisation de realloc()386
      • Utilisation de free()388
      • Règles de bonne conduite pour l'allocation et la libération de mémoire388
      • Désallocation automatique avec alloca()391
      • Débogage des allocations mémoire394
      • Configuration de l'algorithme utilisé par malloc()398
      • Suivi des allocations et des libérations399
      • Surveillance automatique des zones allouées402
      • Fonctions d'encadrement personnalisées404
      • Utilisation de Valgrind406
      • Conclusion411
      • Chapitre 15
        Gestion avancée de la mémoire413
      • Verrouillage de pages en mémoire413
      • Projection d'un fichier sur une zone mémoire417
      • Protection de l'accès à la mémoire428
      • Conclusion433
      • Chapitre 16
        Utilisation des blocs mémoire et des chaînes435
      • Manipulation de blocs de mémoire436
      • Mesures, copies et comparaisons de chaînes442
      • Caractères accentués et codage UTF-8454
      • Recherches dans une zone de mémoire ou dans une chaîne461
      • Recherche dans un bloc de mémoire461
      • Recherche de caractères dans une chaîne463
      • Recherche de sous-chaînes464
      • Analyse lexicale468
      • Conclusion472
      • Chapitre 17
        Tris, recherches et structuration des données473
      • Fonctions de comparaison473
      • Recherche linéaire, données non triées476
      • Recherches dichotomiques dans une table ordonnée482
      • Manipulation, exploration et parcours d'un arbre binaire489
      • Gestion d'une table de hachage495
      • Récapitulatif sur les méthodes d'accès aux données502
      • Conclusion504
      • Chapitre 18
        Routines avancées de traitement des blocs mémoire505
      • Utilisation des expressions rationnelles505
      • Cryptage de données514
      • Cryptage élémentaire514
      • Cryptage simple et mots de passe515
      • Conclusion519
      • Chapitre 19
        Types de données et conversions521
      • Types de données génériques521
      • Types de tailles définies523
      • Catégories de caractères523
      • Conversions entre catégories de caractères528
      • Conversions entre différents types530
      • Types et conversions mathématiques539
      • Nombres complexes539
      • Conversions de réels en entiers541
      • Infinis et erreurs543
      • Représentation des réels en virgule flottante546
      • Conclusion548
      • Chapitre 20
        Entrées-sorties simplifiées549
      • Flux standard d'un processus549
      • Écritures dans un flux553
      • Écritures formatées553
      • Autres fonctions d'écriture formatée562
      • Écritures simples de caractères ou de chaînes566
      • Saisie de caractères570
      • Réinjection de caractère575
      • Saisie de chaînes de caractères577
      • Lectures formatées depuis un flux581
      • Conclusion592
      • Chapitre 21
        Flux de données593
      • Différences entre flux et descripteurs593
      • Ouverture et fermeture d'un flux595
      • Ouverture normale d'un flux595
      • Fermeture d'un flux598
      • Présentation des buffers associés aux flux599
      • Ouvertures particulières de flux601
      • Lectures et écritures dans un flux604
      • Positionnement dans un flux608
      • Positionnement classique609
      • Positionnement compatible Unix 98611
      • Problèmes de portabilité615
      • Paramétrage des buffers associés à un flux616
      • Type de buffers616
      • Modification du type et de la taille du buffer618
      • État d'un flux622
      • Conclusion624
      • Chapitre 22
        Descripteurs de fichiers625
      • Ouverture et fermeture d'un descripteur de fichier625
      • Lecture ou écriture sur un descripteur de fichier636
      • Primitives de lecture636
      • Primitives d'écriture639
      • Positionnement dans un descripteur de fichier648
      • Manipulation et duplication de descripteurs650
      • Duplication de descripteur654
      • Accès aux attributs du descripteur654
      • Attributs du fichier657
      • Verrouillage d'un descripteur659
      • Autre méthode de verrouillage667
      • Conclusion668
      • Chapitre 23
        Communications classiques entre processus669
      • Les tubes670
      • Les tubes nommés684
      • Conclusion690
      • Chapitre 24
        Communications avec les IPC691
      • Communications avec les IPC Posix692
      • Files de messages692
      • Mémoire partagée696
      • Sémaphores702
      • Administration des ressources existantes706
      • Les mécanismes IPC Système V707
      • Obtention d'une clé707
      • Ouverture de l'IPC708
      • Contrôle et paramétrage709
      • Files de messages709
      • Mémoire partagée713
      • Conclusion723
      • Chapitre 25
        Entrées-sorties avancées725
      • Entrées-sorties non bloquantes725
      • Multiplexage d'entrées-sorties733
      • Attente d'événements - Multiplexage d'entrées733
      • Distribution de données - Multiplexage de sorties743
      • Entrées-sorties asynchrones745
      • Asynchronisme utilisant fcntl()745
      • Asynchronisme compatible Posix.1b747
      • Écritures synchronisées758
      • Conclusion762
      • Chapitre 26
        Programmation réseau763
      • Réseaux et couches de communication763
      • Résolution de nom768
      • Services et numéros de ports774
      • Ordre des octets777
      • Conclusion780
      • Chapitre 27
        Utilisation des sockets781
      • Concept de socket781
      • Création d'une socket782
      • Affectation d'adresse785
      • Mode connecté et mode non connecté788
      • Attente de connexions790
      • Demander une connexion796
      • Fermeture d'une socket801
      • Recevoir ou envoyer des données804
      • Accès aux options des sockets812
      • Programmation d'un démon ou utilisation de inetd818
      • Conclusion821
      • Chapitre 28
        Accès au contenu des répertoires823
      • Lecture du contenu d'un répertoire824
      • Changement de répertoire de travail830
      • Création et suppression de répertoire836
      • Suppression ou déplacement de fichiers838
      • Fichiers temporaires842
      • Recherche de noms de fichiers844
      • Correspondance simple d'un nom de fichier844
      • Recherche sur un répertoire total847
      • Développement complet à la manière d'un shell851
      • Descente récursive de répertoires857
      • Conclusion860
      • Chapitre 29
        Attributs des fichiers861
      • Informations associées à un fichier861
      • Autorisations d'accès866
      • Propriétaire et groupe d'un fichier868
      • Taille du fichier869
      • Horodatages d'un fichier872
      • Liens physiques873
      • Liens symboliques875
      • Noeud générique du système de fichiers879
      • Masque de création de fichier883
      • Surveillance du système de fichiers884
      • Conclusion888
      • Chapitre 30
        Accès aux informations du système889
      • Groupes et utilisateurs889
      • Fichier des groupes890
      • Fichier des utilisateurs893
      • Fichier des interpréteurs shell895
      • Nom d'hôte et de domaine896
      • Nom d'hôte896
      • Identifiant d'hôte897
      • Informations sur le noyau898
      • Identification du noyau898
      • Informations sur l'état du noyau899
      • Système de fichiers901
      • Caractéristiques des systèmes de fichiers902
      • Informations sur un système de fichiers909
      • Montage et démontage des partitions911
      • Journalisation911
      • Journal utmp912
      • Fonctions X/Open916
      • Journal wtmp917
      • Journal syslog919
      • Conclusion923
      • Chapitre 31
        Internationalisation925
      • Principe926
      • Catégories de localisations disponibles926
      • Traduction de messages930
      • Catalogues de messages gérés par catgets()931
      • Catalogues de messages Gnu GetText936
      • Configuration de la localisation940
      • Localisation et fonctions de bibliothèques944
      • Localisation et fonctions personnelles949
      • Conclusion956
      • Chapitre 32
        Gestion du terminal957
      • Définition des terminaux957
      • Configuration d'un terminal959
      • Membre c_inflag de la structure termios963
      • Membre c_oflag de la structure termios964
      • Membre c_cflag de la structure termios965
      • Membre c_lflag de la structure termios966
      • Membre c_cc[] de la structure termios966
      • Basculement du terminal en mode brut970
      • Connexion à distance sur une socket975
      • Utilisation d'un pseudo-terminal978
      • Configuration d'un port série RS-232986
      • Conclusion995
      • Chapitre 33
        Entrées-sorties par GPIO997
      • Port GPIO997
      • Accès aux GPIO par / sys998
      • Accès aux GPIO par / dev1001
      • Utilisation de la libgpiod1014
      • API sans contexte de la libgpiod1015
      • API avec contexte de la libgpiod1025
      • Conclusion1034
      • Bibliographie1035
      • Standards1035
      • Livres et articles1035
      • Index1037

  • Origine de la notice:
    • Electre
  • Disponible - 681.44 BLA

    Niveau 3 - Informatique