Systemprogrammierung.: unter Linux :.
Einführung in Linux 1. Das Filesystem 2. Prozesse 3. Unix Tools 4. Die Shell
1. Das Filesystem 1.1 Dateien 1.2 Ordner 1.3 Links
1.1 Dateien Alles im Filesystem sind Dateien Peripherie über Filedescriptor behandelbar Zwei Arten von Dateien: binär und ASCII Auch Systeminformationen sind Dateien im Verz. /proc
1.2 Ordner Sind Dateien vom Typ Ordner Enthalten die Namen der Dateien im Verzeichnis Enthalten immer./ Verweis auf aktuelles Verzeichnis Enthalten immer../ Verweis auf übergeordnetes Verzeichnis
1.3 Links zwei Arten von Links symbolic links und hard links symbolic links sind Verweise auf einen Verweis ( Datei ) hard links sind Verweise auf eine Speicherstelle symbolic links funktionieren auch über Partitionsgrenzen
2. Prozesse root Prozess init ist parent aller Prozesse Jeder Prozess hat einen parent Prozesse erben ihre Zugriffsrechte vom aufrufenden Benutzer Wenn der parent stirbt dann stirbt das child mit ihm
3. Unix Tools Unix Tools haben eine Hilfe die mit -h help aufgerufen wird Ausführliche Beschreibung unter man <toolname> Jedes Unix Tool tut 1 Sache Unix Tools sind zur Zusammenarbeit konzipiert worden
4. Die Shell 4.1 Eigenschaften 4.2 Shellscript
4.1 Eigenschaften Shell ist Kommandointerface zum Kernel bietet einen Scriptinterpreter ( je nach Shell unterschiedlich ) hält Umgebungsvariablen wie $PATH äußerst mächtig
4.2 Shellscript Ist in jeder Shell unterschiedlich Enthält grundsätzliche Arithmetische Logik ( for while usw..) Kann in Dateien gespeichert werden ( Header #!/bin/sh ) sehr leicht zu erlernen, mächtig
Programmierung unter Linux 1. Werkzeuge 2. System calls
1. Werkzeuge 1.1. gcc 1.2 make 1.3 vim
1.1 gcc GNU compiler collection Aufruf: gcc -o <binaryname> <sourcecodefile> In Kombination mit gdb sehr mächtig Enthält Compiler für viele gängige Programmiersprachen ( C / C++ / Java usw..)
1.2 make Aufruf: make <option> Bsp.: make clean od. make Sucht beim Aufruf nach makefile od. Makefile Ist Regelinterpreter ruft im Makefile definierte Kommandos auf Erleichtert mehrfache Programmkompilierung
1.3 vim Aufruf: vim <dateiname> Einer der mächtigsten Editoren überhaupt Unterstützung für fast jede Art von Textdatei ( Highlighting ) Besitzt 3 Modi ( Insert / Editor / Command )
2. System calls 2.1 Grundliegende SC 2.2 IPC
2.1 Grundliegende SC 2.1.1 getpid() 2.1.2 getppid() 2.1.3 fork() 2.1.4 execl() 2.1.5 ftok()
2.1.1 getpid() Aufruf: getpid() Liefert: pid des Prozesses vom Typ pid_t
2.1.2 getppid() Aufruf: getppid() Liefert: pid des parent Prozesses vom Typ pid_t
2.1.3 fork() Aufruf: fork() Liefert: pid des childs im Erzeuger im child immer 0 Typ pid_t Erzeugt identische Kopie vom Aufrufer ( Programmdaten, alles)
2.1.4 execl() Aufruf: execl( &filename, &arg) Liefert: -1 bei Fehler Startet eine binary innerhalb des Aufrufers
2.1.5 ftok() Aufruf: ftok(../keyfile, 1) Liefert: liefert key vom Typ key_t
2.2 IPC 2.2.1 Signal Handler 2.2.2 Message Queue 2.2.3 Shared Memory 2.2.4 Semaphore
2.2.1 Signal Handler Aufruf: signal( SIGTERM, functionpointer) Richtet einen Signalhandler ein für die übergebene Funktion Wird ausgelöst wenn ein Signal vom Typ SIGTERM ankommt
2.2.2 Message Queue 2.2.2.1 Erzeugen 2.2.2.2 Senden 2.2.2.3 Abholen 2.2.2.4 Löschen
2.2.2.1 Erzeugen Aufruf: msgget( key, IPC_CREAT IPC_EXCL 0600 ) Liefert: ID der erzeugten MSQ Erwartet: eindeutigen key ( am besten mit ftok() erzeugen )
2.2.2.2 Senden Aufruf: msgsnd( id, &message, sizeof(message), 0) Liefert: 0 bei Erfolg Erwartet: id von existenter MSQ, Adresse von message struct, Größe der message sowie flags
2.2.2.3 Abholen Aufruf: msgrcv( id, &message, sizeof(message), type, 0) Liefert: bei Erfolg die tatsächliche Größe der message sonst -1 Erwartet: type = 0 dann FIFO ansonsten wird geholt was dem type entspricht
2.2.2.4 Löschen Aufruf: msgctl( id, IPC_RMD, &buffer) Liefert: 0 bei Erfolg sonst -1 Erwartet: Kommando ob Status Überprüfung oder Löschen der Message Queue gefragt ist, falls IPC_STAT dann wird die Antwort in buffer geschrieben
2.2.3 Shared Memory 2.2.3.1 Erzeugen 2.2.3.2 Anbinden 2.2.3.3 Lösen 2.2.3.4 Löschen
2.2.3.1 Erzeugen Aufruf: shmget( key, sizeof(element) * 100, IPC_CREAT 0600) Liefert: bei Erfolg die ID der SHM Erwartet: Die Größe des gewünschten SHM Segments
2.2.3.2 Anbinden Aufruf: shmat( id, 0, 0) Liefert: Die Referenz auf das SHM Segment
2.2.3.3 Lösen Aufruf: shmdt( &address) Liefert: 0 bei Erfolg Erwartet: Referenz auf das SHM Segment
2.2.3.4 Löschen Aufruf: shmctl( id, IPC_RMD, &buffer) Liefert: 0 bei Erfolg sonst -1 Erwartet: Kommando ob Status Überprüfung oder Löschen des SHM gefragt ist, falls IPC_STAT dann wird die Antwort in buffer geschrieben
2.2.4 Semaphore 2.2.4.1 Erzeugen 2.2.4.2 Operationen 2.2.4.3 Löschen
2.2.4.1 Erzeugen Aufruf: semget( key, amount, IPC_CREAT IPC_EXCL 0600) Liefert: bei Erfolg ID der SEMM sonst -1 Erwartet: eindeutigen key_t, Menge der Semaphore
2.2.4.2 Operationen Aufruf: semop( id, list, amount ) Liefert: bei Erfolg die ID der Semaphormenge sonst -1 Erwartet: die eine Liste vom Typ sembuf, sowie die Anzahl der list elemente
2.2.4.3 Löschen Aufruf: semctl( id, IPC_RMD, &buffer) Liefert: 0 bei Erfolg sonst -1 Erwartet: Kommando ob Status Überprüfung oder Löschen des SEM gefragt ist, falls IPC_STAT dann wird die Antwort in buffer geschrieben
Vielen Dank für eure Aufmerksamkeit? :o) Diese Präsentation wurde erstellt und gehalten mit GNU Software DANKE RMS, Linus und alle Free Software Entwickler