وبلاگ بلیان

Linux- Unix- Systemprogrammierung.

معرفی کتاب «Linux- Unix- Systemprogrammierung.» نوشتهٔ Helmut Herold در سال 1999. این کتاب در فرمت pdf، زبان آلمانی ارائه شده است. «Linux- Unix- Systemprogrammierung.» در دستهٔ بدون دسته‌بندی قرار دارد.

Ein kleiner Stevens: Linux/Unix Systemprogrammierung Jeder, der für Unix etwas programmieren möchte, landet früher oder später bei der Systemprogrammierungslegende -- "dem Stevens". Das mehrbändige Referenzwerk von Stevens ist aber nicht das einzige Handbuch, daß empfehlenswert ist: Im Addison-Wesley-Verlag ist von Helmut Herold eine komplette Serie zur Arbeit mit Unix und Linux erschienen, die eine würdige, kürzere Alternative zum Stevens darstellt. In der Buchreihe Unix und seine Werkzeuge ist Linux/Unix Systemprogrammierung der letzte Band und stellt mit über 1000 Seiten in der zweiten Auflage ein umfangreiches Referenzwerk dar. Nach einem kurzen Überblick von 100 Seiten beschreibt Herold für Programmierer die wichtigsten Themengebiete wie Dateihandling, Pufferung, Filedescriptoren und Dateiattribute. Die Informationen über Systembenutzer, Datum- und Zeithandling werden ebenso erklärt wie Prozesse unter Unix, Signale und unterschiedliche Typen von Datenströmen. Der Netzwerkprogrammierung über TCP/IP ist ebenfalls ein Abschnitt gewidmet. Eine Einführung in das Handling von Terminals via termcap, curses und slang runden das Handbuch ab. Abschliessend werden die wichtigsten Arbeitswerkzeuge wie gcc, make und gdb kurz vorgestellt und Lösungen zu den Übungsaufgaben erklärt. Ein kleine, kommentierte (!) Literaturliste führt den neugierigen Leser in den nächsten Bücherkaufrausch ein. Herold schreibt etwas akademisch-trocken, aber äußerst informativ; die Informationen in seinen Büchern sind dicht und angenehm unschwafelig. Systemprogrammierung ist gespickt mit C-Sourcen, die die einzelnen Themengebiete illustrieren und die vielen Tabellen und Hinweise sinnvoll ergänzen. Zusammenhänge werden erklärt, Spezialfälle des einen oder anderen Unix-Dialekts aufgezeigt. Das vorliegende Werk ist für Unix-Leute gedacht, die entweder bereits tiefergehende Erfahrung im Netzwerkbereich haben und jetzt einen Umstieg in die Programmierung suchen oder für Programmierer mit C-Kenntnissen, die sich mit der spezifischen Umgebung Unix vertraut machen möchten. Für die mehreren tausend Seiten Handbücher zum Thema Linux/Unix und der damit verbundenen Mühe kann man dem Autor nur Respekt zollen! --Susanne Schmidt Linux-Unix-Systemprogrammierung......Page 3 Standard-E/A-Funktionen......Page 5 Dateien, Directories und ihre Attribute......Page 6 Die Prozeßsteuerung......Page 7 Fortgeschrittene Ein- und Ausgabe......Page 8 Terminal-E/A......Page 9 Ausgewählte Lösungen zu den Übungen......Page 10 Stichwortverzeichnis......Page 11 Einführung in die Unix-Systemprogrammierung (Kapitel 1 - 2)......Page 13 Ein- und Ausgabe (Kapitel 3 - 5)......Page 14 Prozesse (Kapitel 9 - 13)......Page 15 Besondere Arten von E/ A (Kapitel 14 - 16)......Page 16 Terminal-E/A (Kapitel 20)......Page 17 Literaturhinweise......Page 18 Hinweis zur Buchreihe: Unix und seine Werkzeuge......Page 19 Anmelden am Unix-System......Page 21 Shells......Page 22 Dateiarten......Page 23 Zugriffsrechte......Page 24 Working-Directory......Page 25 Pfadnamen......Page 26 Filedeskriptoren......Page 29 Standard-E/A-Funktionen (aus )......Page 30 Elementare E/A-Funktionen (aus )......Page 32 Der Begriff Prozeß......Page 33 Prozeß-ID......Page 34 Systemfunktionen zur Prozeßsteuerung......Page 35 Ausgabe von System-Fehlermeldungen......Page 38 strerror - Erfragen der zu einer Fehlernummer gehörigen Meldung......Page 39 User-ID......Page 40 Signale......Page 41 Prozeßzeiten......Page 44 Bibliotheksfunktionen sind keine Schnittstellen zum Kern......Page 45 Unix-Standardisierungen......Page 47 Unix-Implementierungen......Page 48 Headerdateien......Page 49 ANSI C-Limits......Page 51 POSIX-Limits......Page 52 sysconf, pathconf und fpathconf - Erfragen von Laufzeitlimits......Page 55 Überblick über die Limits......Page 60 Unbestimmte Laufzeitlimits......Page 62 Primitive Systemdatentypen......Page 63 Erste Einblicke in den Linux-Systemkern......Page 64 Directories der Quellprogramme des Linux-Kerns......Page 65 Generieren und Installieren eines neuen Linux-Kerns......Page 67 Konfigurieren des Kerns in den Quellprogrammen......Page 70 Einführung in wichtige Algorithmen und Konzepte des Linux-Kerns......Page 72 Primitive Systemdatentypen am aktuellen System......Page 111 Allgemeines......Page 113 Begriffsklärung......Page 114 Allgemeine Konventionen......Page 116 #define - Definieren von Konstanten und Makros......Page 118 #include - Einkopieren ganzer Dateien......Page 121 Bedingte Kompilierung......Page 123 Von ANSI C vordefinierte Makros......Page 124 Grunddatentypen......Page 126 Datentyp void......Page 128 Die neuen Schlüsselwörter const und volatile......Page 129 Funktionsprototypen - Die große Neuheit von ANSI C......Page 131 Ellipsen-Prototypen für Funktionen mit variabler Parameterzahl......Page 132 Abarbeiten variabel langer Argumentlisten......Page 133 Die ANSI-C-Bibliothek......Page 136 - Testmöglichkeit mit der assert-Funktion......Page 137 - Klassifizieren oder Umwandeln von Zeichen......Page 139 - Limits und Eigenschaften für Gleitpunkt-Datentypen......Page 140 - Limits für ganzzahlige Datentypen......Page 142 - Internationales C......Page 143 - Mathematische Funktionen......Page 148 - Standarddefinitionen......Page 153 - Allgemein nützliche Funktionen......Page 154 - Umgang mit Zeichenketten......Page 164 Wertebereich der ganzzahligen Datentypen......Page 172 Duale Ausgabe von Gleitpunktzahlen......Page 173 Eigenschaften von Gleitpunkt-Datentypen......Page 176 Ausgabe einer Cos-, Sin- und Tan-Tabelle......Page 177 Runden auf eine beliebige Nachkommastellenzahl......Page 178 Der Datentyp FILE......Page 179 fopen – Öffnen einer Datei......Page 180 freopen – Öffnen einer Datei mit bereits existierendem Stream......Page 182 Lesen und Schreiben in Dateien......Page 184 getchar – Lesen eines Zeichen von stdin putchar – Schreiben eines Zeichen auf stdout......Page 185 getc und fgetc – Lesen eines Zeichens aus einer Datei putc und fputc – Schreiben eines Zeichens in eine Datei......Page 187 ungetc – Zurückschieben eines gelesenen Zeichens in Eingabepuffer......Page 189 gets und fgets – Lesen einer ganzen Zeile von stdin oder aus Datei puts und fputs – Schreiben einer ganzen Zeile auf stdin oder in Datei......Page 191 scanf und fscanf – Formatiertes Lesen von stdin oder aus Datei......Page 192 printf und fprintf – Formatiertes Schreiben auf stdout oder in eine Datei......Page 197 sprintf – Formatiertes Schreiben in einen String......Page 204 vprintf und vfprintf – Formatiertes Schreiben auf stdout oder in eine Datei (Argumentzeiger)......Page 205 fread und fwrite – Binäres Lesen und Schreiben ganzer Blöcke......Page 206 Unterschiedliches Zeitverhalten von Standard-E/A-Funktionen......Page 210 _IOLBF – Zeilenpufferung......Page 212 setbuf und setvbuf – Einstellen der Pufferungsart......Page 213 fflush – Inhalte von Puffern in eine Datei übertragen......Page 215 fseek und ftell – Positionieren in einer Datei (1. Möglichkeit)......Page 216 fsetpos und fgetpos – Positionieren in einer Datei (2. Möglichkeit)......Page 218 Temporäre Dateien......Page 219 tmpnam – Einen eindeutigen Namen für eine temporäre Datei erzeugen......Page 220 tempnam – Das Erzeugen von temporären Dateinamen (mit Directory- und Präfixvorgabe)......Page 221 remove – Löschen einer Datei......Page 224 rename – Umbennen einer Datei......Page 225 perror – Ausgabe der zu errno gehörenden Fehlermeldung......Page 226 strerror – Erfragen der zu einer Fehlernummer gehörenden Fehlermeldung......Page 227 Ausgeben von bestimmten Zeilen einer Datei......Page 228 Schachtelungsanalyse für C-Programme......Page 229 Filedeskriptoren......Page 233 open – Öffnen einer Datei......Page 234 creat – Anlegen einer neuen Datei......Page 238 close – Schließen einer Datei......Page 240 read – Lesen von einer Datei......Page 241 write – Schreiben in eine Datei......Page 243 Positionieren in Dateien......Page 245 lseek – Positionieren des Schreib-/Lesezeigers in einer Datei......Page 246 Effizienz von E/A-Operationen......Page 249 v-node- Tabelle (v-node table)......Page 252 File Sharing......Page 253 Atomare Operationen......Page 255 dup und dup2 – Duplizieren von Filedeskriptoren......Page 257 Ändern oder Abfragen der Eigenschaften einer offenen Datei......Page 259 fcntl – Ändern und Abfragen der Einstellungen einer offenen Datei......Page 260 fileno – Erfragen des zu einem FILE-Zeiger gehörigen Filedeskriptors......Page 265 fdopen – Erzeugen eines FILE-Zeigers zu einem Filedeskriptor......Page 266 Das Directory /dev/fd......Page 271 Nachvollziehen einer Notation aus der Bourne- und Korn-Shell......Page 272 Struktur stat......Page 275 stat, fstat und lstat – Erfragen von Dateiattributen......Page 276 Dateiarten......Page 277 Zugriffsrechte einer Datei......Page 279 Einfache Zugriffsrechte für die drei Benutzerklassen......Page 280 Set-User-ID und Set-Group-ID......Page 281 Saved Set-User-ID und Saved Set-Group-ID......Page 282 Sticky-Bit (Saved-Text-Bit)......Page 284 chmod und fchmod – Ändern der Zugriffsrechte für eine Datei......Page 285 access – Zugriffserlaubnis für reale User-/Group-ID auf eine Datei......Page 288 umask – Setzen und Abfragen der Dateikreierungsmasken......Page 290 chown, fchown und lchown – Ändern der User-ID und Group-ID einer Datei......Page 293 Partitionen, Filesysteme und i-nodes......Page 294 Filesysteme......Page 295 Partitionen und Filesysteme......Page 298 Der i-node......Page 301 Hard-Links......Page 304 link – Erzeugen eines Links auf eine existierende Datei......Page 307 unlink – Entfernen eines Dateinamens aus einem Directory......Page 308 Symbolische Links......Page 309 Vorsicht mit endlosen rekursiven Links......Page 312 symlink – Anlegen eines symbolischen Link......Page 313 readlink – Erfragen des Namens, auf den ein symbolischer Link zeigt......Page 314 Größe einer Datei......Page 315 truncate und ftruncate – Abschneiden von Dateien......Page 317 Löcher in Dateien......Page 318 Zeiten einer Datei......Page 319 utime und utimes – Ändern der Zugriffs- und Modifikationszeit......Page 320 Directories......Page 323 Zugriffsrechte für Directories......Page 324 rmdir – Löschen eines leeren Directorys......Page 325 chdir und fchdir – Wechseln in ein neues Directory......Page 326 getcwd – Erfragen des Working-Directory-Pfadnamens......Page 327 opendir, readdir, rewinddir und closedir – Lesen von Directories......Page 329 Gerätedateien......Page 337 Der Puffercache......Page 339 sync und fsync – Schreiben des Puffercaches......Page 340 Realisierung von Filesystemen unter Linux......Page 341 Mounten von Filesystemen......Page 342 Initialisierung des Superblocks......Page 344 Operationen auf den Superblock......Page 346 Der i-node......Page 351 i-node-Operationen......Page 354 Fileoperationen......Page 358 Der Directorycache......Page 363 Das ext2-Filesystem von Linux......Page 366 Ermitteln der Größe von Dateien......Page 376 Ausgeben der Attribute von Dateien......Page 377 Maximale Tiefe eines Directory-Baums......Page 378 Suchen eines Dateinamens im Directory-Baum......Page 379 Paßwortdatei /etc/passwd......Page 381 getpwent, setpwent und endpwent – Sukzessives Erfragen aller /etc/ passwd-Einträge......Page 383 /etc/shadow......Page 385 getgrgid und getgrnam – Erfragen eines /etc/ group-Eintrags über GID bzw. Loginnamen......Page 386 getgrent, setgrent und endgrent – Sukzessives Erfragen aller /etc/ group-Einträge......Page 387 getgroups, setgroups und initgroups – Erfragen und Setzen von Zusatz-GIDs......Page 388 Informationen aus Netzwerkdateien......Page 389 uname – Erfragen von Informationen zum lokalen System......Page 390 gethostname – Erfragen des Hostnamens in einem TCP/IP-Netzwerk......Page 391 Informationen zu Systemanmeldungen......Page 392 Ausgeben von Informationen zu bestimmten Benutzern......Page 393 Ausgeben von Informationen zu bestimmten Gruppen......Page 394 Implementierung des Kommandos id......Page 395 Datentypen......Page 397 Datums- und Zeitfunktionen......Page 398 time und gettimeofday – Erfragen der momentanen Kalenderzeit......Page 399 mktime – Umwandeln von struct tm-Zeit in time_t-Zeit......Page 401 asctime und ctime – Umwandeln von struct tm- und time_t-Zeit in date-String......Page 403 strftime – Umwandeln einer struct tm-Zeit in formatierten benutzerdefinierten String......Page 405 difftime – Ermitteln der Differenz zwischen zwei Uhrzeiten......Page 408 clock – Erfragen der seit Programmstart verbrauchten CPU-Zeit......Page 410 Die Zeitgrenzen......Page 411 Umsetzen des Kommandos cal......Page 413 Ausgabe der Zeit und des Datums in eigenem Format......Page 414 Die Headerdatei ......Page 415 setjmp und longjmp – Springen über Funktionsgrenzen hinweg......Page 416 Automatic-, register-, static- und volatile-Variable bei nicht-lokalen Sprüngen......Page 424 Mehrfaches Aufrufen von setjmp......Page 428 Rückkehr zu einer nicht mehr im Stack vorhandenen Funktion......Page 429 Startup-Routine – Startadresse eines Programms......Page 431 main – Benutzerdefinierter Startpunkt eines Programms......Page 432 Exit-Status eines Prozesses......Page 433 exit – Normales Beenden eines Programms mit cleanup......Page 435 atexit – Einrichten von Exithandlern......Page 436 Start und Beendigung eines Benutzerprozesses......Page 438 Evironment-Liste......Page 439 Zugriff auf die ganze Environment-Liste......Page 440 getenv – Erfragen des Werts einer einzelnen Environment-Variablen......Page 441 putenv, setenv und unsetenv – Ändern, Hinzufügen oder Löschen von Environment-Variablen......Page 442 Unix-Prozeß im Hauptspeicher......Page 443 malloc, calloc, realloc – Dynamisches Anfordern von Speicherplatz......Page 445 free – Freigeben von dynamisch angefordertem Speicherplatz......Page 450 getrlimit und setrlimit – Erfragen und Setzen der Ressourcenlimits......Page 451 Ressourcenbenutzung eines Unix-Prozesses......Page 455 Allgemeine Begriffe und Konzepte......Page 457 Der virtuelle Adreßraum eines Prozesses......Page 469 Paging......Page 475 Gefahren bei der Verwendung von lokalen Variablen......Page 489 Eigene Implementierung von getenv, putenv, setenv und unsetenv......Page 490 Automatisches Erstellen von Bundesliga-Tabellen......Page 492 getpid und getppid – Erfragen der PID und PPID......Page 495 getgid und getegid – Erfragen der realen und effektiven Group-ID......Page 496 Unix-Prozeßhierarchie......Page 497 fork – Kreieren eines neuen Prozesses......Page 498 Unterschiede zwischen Eltern- und Kindprozeß......Page 505 Vererbungen eines Elternprozesses an seinen Kindprozeß......Page 506 vfork – Kreieren eines Prozesses mit anschließendem exec-Aufruf......Page 510 clone – Ein fork (unter Linux) mit einer gemeinsamen Ressourcennutzung durch Eltern- und Kindprozeß......Page 513 Arten von Beendigungen eines Prozesses......Page 514 Zombie-Prozesse......Page 515 wait und waitpid – Warten auf die Beendigung eines Prozesses......Page 516 Verhindern von Zombies......Page 525 wait3 und wait4 – Warten auf Ende eines Prozesses (Information über benutzte Ressourcen)......Page 526 Synchronisationsprobleme zwischen Eltern- und Kindprozessen......Page 527 Synchronisation von Eltern- und Kindprozeß mit Signalen......Page 529 Die exec-Funktionen......Page 532 Unterschiede der exec-Funktionen im Überblick......Page 533 Unterschiede bei Benutzung des Environment......Page 534 Vererbungen bei exec......Page 535 Die Funktion system......Page 539 setuid und setgid – Ändern der realen und effektiven User-ID und Group-ID......Page 544 saved Set-User-ID-Bit – Zeitweises Ein-/Ausschalten des Set-User-ID-Mechanismus......Page 545 seteuid und setegid – Ändern der effektiven User-ID bzw. Group-ID......Page 546 setreuid und setregid – Vertauschen der realen und effektiven User-/Group-ID......Page 547 setfsuid und setfsgid – Setzen der User-/Group-IDs für Filesystemzugriffe unter Linux......Page 548 times – Erfragen der von einem Prozeß verbrauchten Zeit......Page 549 getlogin – Erfragen des Namens des Prozeßeigentümers......Page 552 Buchführung bei Prozessen (process accounting)......Page 553 Ausgeben der Ziffern von Zahlen als Wörter......Page 557 Vorsicht bei Aufruf von vfork in einer anderen Funktion als main......Page 558 Ausgeben der Prozeßhierarchie in Baumform......Page 559 Terminal-Logins......Page 561 Netzwerk-Logins......Page 564 getpgrp/getpgid – Erfragen der Prozeßgruppen-ID......Page 566 setpgid – Setzen der Prozeßgruppen-ID......Page 567 setsid – Einrichten einer neuen Session......Page 568 Kontrollterminals, Sessions und Prozeßgruppen......Page 569 tcgetpgrp und tcsetpgrp – Erfragen und Setzen der Vordergrund-Prozeßgruppen-ID......Page 570 Allgemeines zur Jobkontrolle......Page 571 Lesen vom Terminal durch Hintergrundprozesse (mit Jobkontrolle)......Page 572 Schreiben auf Terminal durch Hintergrundprozesse......Page 573 Ausführung von Programmen durch eine Shell ohne Jobkontrolle......Page 574 Ausführung von Programmen durch eine Shell mit Jobkontrolle......Page 576 Verwaiste Prozeßgruppen......Page 577 Kontrollterminal für eine verwaiste Prozeßgruppe......Page 578 Blockierende E/A-Operationen......Page 579 Sperren von Dateien oder Dateibereichen mittels fcntl......Page 580 Einrichten, Freigeben und Testen von Sperren......Page 583 Blockierung (Deadlock) durch gegenseitiges Aussperren......Page 584 Sperren für Dämonen......Page 587 Mögliche Probleme beim Sperren bis zum Dateiende......Page 588 Starke Sperren (mandatory locking) in SVR4......Page 591 Schnittstellen der Bibliotheksdatenbank......Page 595 Überblick zur Implementierung der Bibliotheksdatenbank......Page 598 Die Headerdatei db.h......Page 601 Testen der Datenbank......Page 603 Das Signalkonzept und die Funktion signal......Page 611 signal – Einrichten von Signalhandlern......Page 612 Signale und die exec-Funktion......Page 617 Begriffe rund um das Signalkonzept......Page 618 Signalnamen......Page 619 sys_siglist und psignal – Signalbeschreibungen......Page 626 Zeitspanne zwischen Auftreten eines Signals und Aufruf der signal-Funktion......Page 628 Endlosschleifen beim Warten auf das Eintreten von Signalen......Page 629 Signalmengen......Page 630 Struktur sigaction......Page 631 sigprocmask – Erfragen oder Ändern einer Signalmaske......Page 634 sigpending – Erfragen von blockierten Signalen, die momentan hängen......Page 637 Erlaubte Systemaufrufe in Signalhandlern (Reentrant-Funktionen)......Page 639 kill – Senden eines Signals an einen anderen Prozeß oder Prozeßgruppe......Page 640 alarm und setitimer – Einrichten von Zeitschaltuhren......Page 642 pause – Suspendieren eines Prozesses (bis Eintreffen eines Signals)......Page 646 sleep, usleep, select und nanosleep – Suspendieren eines Prozesses (für eine bestimmte Zeit)......Page 647 Mögliche Implementierungen für sleep......Page 648 sigsetjmp und siglongjmp – setjmp und longjmp für Signalhandler......Page 651 sigsuspend – Suspendieren eines Prozesses während der Änderung der Signalmaske......Page 654 Schützen eines kritischen Codeausschnitts vor Unterbrechung durch Signale......Page 655 Synchronisation von Prozessen mit Signalen......Page 657 sleep3 – Eine zuverlässige Implementierung von sleep......Page 659 Anormale Beendigung mit Funktion abort......Page 660 Mögliche Implementierung von abort......Page 661 Zusätzliche Argumente für Signalhandler in SVR4......Page 662 Umständliche Beendigung bei der abort-Implementierung......Page 663 Implementierung der Funktion system mit Signalhandler......Page 664 Kindprozeß nur für gewisse Zeit ausführen lassen......Page 665 Allgemeines zu STREAMS......Page 667 STREAM-Messages......Page 669 Message-Typen......Page 670 putmsg und putpmsg – Schicken einer Message an einen STREAM......Page 671 getmsg und getpmsg – Lesen einer Message aus einem STREAM......Page 672 ioctl – Ausführen der unterschiedlichsten Operationen auf STREAMS......Page 675 isastream – Überprüfen, ob Filedeskriptor ein STREAM ist......Page 676 Ausgeben der Steuermodule eines STREAMS......Page 677 Schreibmodus für STREAMS......Page 679 Lesemodus für STREAMS......Page 680 Anzahl der verschiedenen Arten von Informationen bei getmsg......Page 681 E/A-Multiplexing......Page 683 Polling......Page 684 select – E/A-Multiplexing in SVR4 und BSD......Page 685 delay – Ein sleep für Mikrosekunden mit select......Page 689 poll – E/A-Multiplexing für STREAMS in SVR4......Page 690 delay2 – Ein sleep für Millisekunden mit poll......Page 692 Asynchrone E/A......Page 693 SVR4 – Asynchrone E/A nur für STREAMS......Page 694 mmap – Einrichten von Memory Mapped I/O......Page 695 msync – Aktualisieren der einem mapped-Bereich zugeordneten Datei......Page 701 Sperren von Speicherbereichen......Page 702 Laufzeitverbesserungen durch Memory Mapped I/O......Page 703 readv und writev – Gleichzeitiges Lesen und Schreiben mit mehreren Puffern......Page 707 Besonderes Lesen und Schreiben auf speziellen Geräten......Page 709 Zahlenwurzeln in den mapped-Speicherbereich schreiben und wieder lesen......Page 711 E/A-Multiplexing für das Lesen aus zwei Pipes......Page 712 sendmail – Mail-Dämon......Page 715 Besonderheiten von Dämonen......Page 716 Schreiben von eigenen Dämonen......Page 717 Umwandeln eines normalen Prozeß in einen Dämonprozeß......Page 718 Fehlermeldungen von Dämonen......Page 719 log – STREAMS-Gerätetreiber in SVR4......Page 720 syslog – Error-Logging in BSD......Page 721 Schließen der Filedeskriptoren 0, 1 und 2 durch einen Dämonprozeß......Page 726 Dämon zur Überwachung von neuen Anmeldungen......Page 727 Überblick über die unterschiedlichen Arten der Interprozeßkommunikation......Page 729 pipe – Einrichten einer Pipe......Page 730 Zugriff auf eine Pipe mit Standard-E/A-Funktionen......Page 737 Leseseite einer Pipe in die Standardeingabe eines anderen Programms umleiten......Page 738 Synchronisation von Prozessen über Pipes......Page 741 popen und pclose – Einrichten und Schließen einer Pipe zu einem anderen Programm......Page 743 Transformationen mittels Filterprogramme......Page 746 Koprozesse in der Korn-Shell......Page 749 Koprozesse in C......Page 750 Eventuelle Probleme mit Standard E/A-Pufferung bei Koprozessen......Page 754 Regeln für FIFO-Zugriffe......Page 756 mkfifo – Kommando zum Kreieren von FIFOs auf Shell-Ebene......Page 757 Verwendung von FIFOs zur Client-Server-Kommunikation......Page 759 Hexadump für Dateien (mit Eltern-Kind-Pipe)......Page 761 Parallele Matrizenmultiplikation durch mehrere Kindprozesse......Page 762 Gleichzeitiges Schreiben der Standardausgabe und -fehlerausgabe in Pipe......Page 763 Kennungen und Schlüssel......Page 765 Kommunikationsmöglichkeiten von nicht verwandten Prozessen......Page 766 Zugriffsrechte......Page 767 Message-Queues......Page 768 msqid_ds – Status einer Message-Queue......Page 769 msgget – Öffnen oder Kreieren einer Message-Queue......Page 770 msgsnd – Senden von Messages......Page 771 msgrcv – Empfangen von Messages......Page 772 msgctl – Abfragen/Ändern des Status oder Löschen einer Message Queue......Page 774 Client-Server-Implementierung mit Message-Queues......Page 776 Synchronisation von kritischen Abschnitten mit Semaphore......Page 782 semid_ds – Status eines Semaphors......Page 783 semget – Öffnen oder Kreieren einer Semaphormenge......Page 785 semctl – Abfragen/Ändern des Status oder Löschen einer Semaphormenge......Page 786 semop – Durchführen von Operationen auf Semophormengen......Page 788 Realisierung der P- und V-Operationen von Dijkstra......Page 791 shmid_ds – Status eines Shared-Memory-Segments......Page 792 Limits......Page 793 shmctl – Abfragen/Ändern des Status oder Löschen eines Shared- Memory-Segments......Page 794 shmat – Anbinden eines Shared-Memory-Segments an einen Prozeß......Page 796 Shared Memory zwischen verwandten Prozessen......Page 798 Client-Server-Implementierung mit Shared Memory und Semaphoren......Page 801 Kreieren von Message-Queues mit und ohne IPC_PRIVATE......Page 812 Wortstatistik zu einer Textdatei (Vorsicht mit internen Zeigern)......Page 813 Client-Server-Realisierung mit Pipes......Page 817 Client-Server-Realisierung mit Message-Queues, Shared Memory und Semaphoren......Page 818 stream_pipe – Realisierung einer Stream Pipe in SVR4......Page 819 stream_pipe – Realisierung einer Stream Pipe in BSD/Linux......Page 820 Kommunikation mit einem Koprozeß über Stream Pipe......Page 821 Austausch von Filedeskriptoren zwischen Prozessen......Page 823 send_fd, empfang_fd und send_fehl – Eigene Funktionen zum Austausch von Filedeskriptoren......Page 824 Austausch von Filedeskriptoren in SVR4......Page 826 Austausch von Filedeskriptoren in 4.3BSD......Page 828 Austausch von Filedeskriptoren in neueren BSD-Systemen und in Linux......Page 831 Client......Page 835 Server......Page 837 Benannte Stream Pipes......Page 840 serv_initverbind, serv_bereit und cli_verbind -Eigene Funktionen für Client-Server-Verbindungen......Page 841 serv_initverbind, serv_bereit und cli_verbind – Realisierung in SVR4......Page 842 serv_initverbind, serv_bereit und cli_verbind – Realisierung in BSD-Unix und SVR4......Page 845 Client-Server-Realisierung mit nicht verwandten Prozessen......Page 857 Client......Page 858 Server......Page 860 Byteanordnung bei TCP/IP......Page 868 IP-Adressen und Port-Nummern......Page 869 IP-Socket-Adressen......Page 870 Manipulieren, Konvertieren und Extrahieren von IP-Adressen......Page 871 Name-Server......Page 875 Informationen zu Port-Nummern......Page 879 Beispielprogramme zur Netzwerkprogrammierung mit TCP/IP......Page 883 Parallele Matrizenmultiplikation durch mehrere Kindprozesse......Page 889 Terminalmodi......Page 891 Struktur termios......Page 892 Spezielle Eingabezeichen......Page 893 Terminalflags......Page 894 Terminal-E/A-Funktionen und der Modul »Terminal Line Discipline«......Page 897 tcsetattr und tcgetattr – Setzen und Erfragen von Terminalattributen......Page 899 ctermid – Erfragen des Kontrollterminalnamens......Page 901 isatty – Erfragen, ob ein Filedeskriptor auf Terminal eingestellt ist......Page 902 ttyname – Erfragen von Terminalpfadnamen......Page 903 getpass – Verdecktes Einlesen eines Paßwortes......Page 907 Spezielle Eingabezeichen......Page 908 Terminalflags......Page 912 cfgetispeed, cfgetospeed, cfsetispeed, cfsetospeed – Erfragen und Setzen der Baudrate......Page 920 tcdrain, tcflow, tcflush und tcsendbreak – Funktionen zur Zeilensteuerung eines Terminals......Page 922 Nicht-kanonischer Modus......Page 924 Umschalten zwischen cbreak- und raw-Terminalmodus......Page 926 Terminalfenstergrößen......Page 931 termcap, terminfo und curses......Page 933 terminfo – Eine andere Datenbank von Terminaleigenschaften......Page 934 Bildschirm löschen, Cursor positionieren und Text ausgeben......Page 935 Attribute für Textausgaben festlegen......Page 938 Einlesen von der Tastatur......Page 940 Funktions- und Positionierungstasten......Page 941 Bildschirminhalte verschieben und Bildausschnitte kopieren......Page 944 S-Lang-Modus ein- und ausschalten......Page 948 Bildschirm löschen, Cursor positionieren und Text ausgeben......Page 951 Vorder- und Hintergrundfarben für Textausgaben......Page 954 Umschalten auf anderen Zeichensatz......Page 957 Einlesen von der Tastatur......Page 961 Die Linux-Konsole......Page 965 Erster Überblick über die Fähigkeiten einer Linux-Konsole......Page 966 Kontrollzeichen......Page 968 Escape-Sequenzen......Page 969 Repräsentation von Steuertasten......Page 977 Direkter Bildschirmzugriff......Page 978 Realisierung der Borland-Semigraphik auf einer Linux-Konsole......Page 980 Die Programmierung von virtuellen Konsolen unter Linux......Page 997 Wichtige Headerdateien, Funktionen und Strukturen......Page 998 Erfragen von Informationen zu virtuellen Konsolen......Page 999 Einfache Programmierung von virtuellen Konsolen......Page 1000 Simulation eines Wettrennens......Page 1006 Chaos-Musik......Page 1009 Autofahren auf einer kurvenreichen Straße......Page 1010 Buchstaben-Memory......Page 1013 Erraten von AND, NAND, OR, NOR und XOR-Gatter......Page 1015 Dateinamenexpandierung mit der Funktion popen......Page 1019 Dateinamenexpandierung mit der Funktion glob......Page 1021 String-Vergleiche mit den Metazeichen der Dateinamenexpandierung......Page 1025 String-Vergleiche mit regulären Ausdrücken......Page 1028 Die traditionelle Technik......Page 1035 Die getopt-Funktionen......Page 1038 Das GNU-Softwarepacket popt......Page 1049 Klassifikation der Dateitypen durch Suffixe......Page 1067 Wichtige Optionen......Page 1069 C-Erweiterungen im gcc......Page 1070 Einige wichtige Optionen......Page 1072 gdb – Der GNU-Debugger......Page 1073 Allgemeines......Page 1074 strace – Mitprotokollieren aller Systemaufrufe......Page 1079 Aufrufsyntax......Page 1080 Beschreibung......Page 1081 Optionen......Page 1082 Tools zum Auffinden von Speicherüberschreibungen und -lücken......Page 1085 efence – Electric Fence (Elektrischer Zaun)......Page 1086 checkergcc – C-Compiler zum Auffinden von Speicherüberschreibungen und -lücken......Page 1090 mpr und mcheck – Auffinden von Speicherlücken und -überschreibungen......Page 1092 Aufrufsyntax......Page 1094 Schlüsselangabe......Page 1095 Typische Anwendungen......Page 1097 Dynamische Bibliotheken......Page 1099 Entwerfen von dynamischen Bibliotheken......Page 1100 Generieren von dynamischen Bibliotheken......Page 1102 Installieren von dynamischen Bibliotheken......Page 1103 Beispiel für das Erzeugen, Installieren und Benutzen einer dynamischen Bibliothek......Page 1104 Möglichkeiten zur Benutzung von dynamischen Bibliotheken......Page 1106 make – Ein Werkzeug zur automatischen Programmgenerierung......Page 1112 Das Makefile......Page 1113 Einfache Aufrufformen von make......Page 1118 Makros......Page 1124 Suffixregeln......Page 1131 Spezielle Zielangaben......Page 1133 Headerdatei eighdr.h......Page 1135 Zentrales Fehlermeldungsmodul fehler.c......Page 1136 Ausgewählte Lösungen zu Kapitel 4 (Elementare E/A-Funktionen)......Page 1141 Ausgewählte Lösungen zu Kapitel 5 (Dateien, Directories und ihre Attribute)......Page 1142 Ausgewählte Lösungen zu Kapitel 8 (Nicht-lokale Sprünge)......Page 1145 Ausgewählte Lösungen zu Kapitel 9 (Der Unix-Prozeß)......Page 1146 Ausgewählte Lösungen zu Kapitel 10 (Die Prozeßsteuerung)......Page 1147 Ausgewählte Lösungen zu Kapitel 11 (Attribute eines Prozesses)......Page 1149 Ausgewählte Lösungen zu Kapitel 13 (Signale)......Page 1151 Ausgewählte Lösungen zu Kapitel 15 (Fortgeschrittene Ein- und Ausgabe)......Page 1153 Ausgewählte Lösungen zu Kapitel 17 (Pipes und FIFOs)......Page 1154 Ausgewählte Lösungen zu Kapitel 18 (Message- Queues, Semaphore und Shared Memory)......Page 1156 Literaturverzeichnis......Page 1157 Stichwortverzeichnis......Page 1161
دانلود کتاب Linux- Unix- Systemprogrammierung.