Konzeption und prototypische Implementierung eines Generators für heterogenen Netzwerktraffic unter dem Aspekt des Einsatzes in Forschung und Lehre

Größe: px
Ab Seite anzeigen:

Download "Konzeption und prototypische Implementierung eines Generators für heterogenen Netzwerktraffic unter dem Aspekt des Einsatzes in Forschung und Lehre"

Transkript

1 Konzeption und prototypische Implementierung eines Generators für heterogenen Netzwerktraffic unter dem Aspekt des Einsatzes in Forschung und Lehre Diplomarbeit vorgelegt von Andreas Leibrock Prüfer: Prof. Dr. Hans-Jürgen Steffens Zweitprüfer: Prof. Dr.-Ing. Manuel Duque-Antón Fachbereich I/MST Fachhochschule Kaiserslautern Standort Zweibrücken 27. September 2005

2 c Copyright 2005 Andreas Leibrock Alle Rechte vorbehalten

3 Ehrenwörtliche Erklärung Hiermit erkläre ich an Eides statt, dass ich die vorliegende Arbeit selbstständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt und die aus anderen Quellen entnommenen Stellen als solche gekennzeichnet habe. Limbach, am 27. September 2005 Andreas Leibrock i

4 ii

5 Kurzfassung In einem Labor für Rechnernetze soll unter anderem den Studenten ein Einblick in die Struktur moderner Netzwerke gegeben werden. Hierzu ist es in der Regel erforderlich, dass die Studenten bestehenden Netzwerktraffic analysieren können. Hier stellt sich dem Lehrbetrieb jedoch ein Problem: Wie erhalte ich genau den Traffic, den die Lernenden untersuchen sollen. Aus diesem Grund braucht man eine Software, welche - durch einfache Eingabeparameter gesteuert - den Traffic erzeugt, der im Labor erwünscht ist. Eine solche Software wird prototypisch im Rahmen dieser Arbeit entwickelt. iii

6

7 Nomenklatur Um die Lesbarkeit des Programmtextes zu verbessern, wurde eine Nomenklatur eingeführt. Diese soll auch bei der Weiterentwicklung der Module Verwendung finden. Allgemeines Variablennamen beginnen mit dem ersten Buchstaben des Typs (int ifoo- Bar). Zusammengesetzte Namen : Das neue Wort beginnt mit einem Grossbuchstaben (diesisteinnameeinerneuenvariablenoderfunktion). Klassen Klassennamen beginnen immer mit einem C (Bsp: CKlasse). private Attribute beginnen mit einem Unterstrich (Bsp: int iattribut). Prefixe globale Funktionen/Methoden die alle Plugins betreffen: P (Bsp: P Main) protokollspezifische Module: Proto (Bsp: Proto FTP) Grafiken Auch in den Grafiken wird ein einheitliches System von Symbolen aufrechterhalten. v

8 Symbol Bedeutung Datum1 next Knoten einer einfach verketteten Liste prev Datum2 next Knoten einer doppelt verketteten Liste Datum 3 Zeiger Nomenklatur Symbole UML Auch bei der UML-Darstellung wurde darauf geachtet, dass die gängigen Notationen eingehalten wurden. CKlasse # iprotectedattribut : int + cpublicattribut : char - bprivateattribut : bool +CKlasse() + CKlasse() +publicfunktion(parameter) : void #protectedfunktion(parameter) : void - privatefunktion(parameter) : void Prototyp einer UML-Klasse

9 Akteur1 Use Case 1 uses Akteur2 Use Case 3 Use Case 2 USE CASE- Diagramm Prototyp eines Use-Case-Diagramms Listings Quelltexte werden im laufenden Text wie folgt dargestellt: 1 2 /* */ 3 //Dies ist ein Listing 4 5 int test(char* foo){ 6 cout << foo << endl; 7 return 0; 8 } Listing 1: Prototyp Listing Es wird eine farbliche Hervorhebung vorgenommen. Hierbei werden Kommentare in Blau und Operatoren in Grün eingefätbt. Programme Als Programme werden im Folgenden Abdrucke von Sitzungen bezeichnet. Wird auf der Kommandozeile des Betriebsystems (Shell) ein Kommando ausgeführt, so wird dies folgendermassen im Text präsentiert:

10 pwd /home/leibi lsof -i COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME nuts 4899 leibi 5u IPv TCP *:9999 (LISTEN) prototypische Programmsitzung Man sieht in Zeile eins und drei die Eingabeaufforderung des Betriebsystems. Im ersten Fall wird der Befehl pwd abgesetzt, welcher das aktuelle Arbeitsverzeichnis anzeigt. Dies sieht man in Zeile zwei. Der Befehl lsof -i in Zeile drei gibt an, welche Programme gerade an einer Netzwerkschnittstelle aktiv sind. An dieser Stelle sieht man das Programm nuts, welches an Port 9999 auf jeder verfügbaren Schnittstelle lauscht. Nuts ist der Arbeitsname für das hier entwickelte Programm. Das Akronym steht für N etwork U ser T raffic S imulator, also die Simulation von durch Benutzer erzeugten Netzwerkverkehr. Da in der Entwicklung klar geworden ist, dass es sich mehr um einen Generator denn um einen Simulator handelt, ist der Name noch verbesserungsfähig. Da der Name jedoch schon vor Beginn dieser Arbeit bestand, wird er noch beibehalten.

11 Inhaltsverzeichnis 1 Einführung Danksagung Motivation Schon vorhandene Generatoren Ausstattung des Labors Grundlagen Produktionssystem Programmiersprachen Dynamisches Laden von Modulen Auswerten der Übergabeparameter Einlesen der Konfigurationsdatei Designentscheidungen Programmierparadigma Threads oder Prozesse Softwareengineering Planung Abschliessende Prüfungen Analyse ix

12 INHALTSVERZEICHNIS 5 Der Kern Verwaltung der Module Kommunikation - Grundlagen Kommunikation Implementierung Plugins Verbindliche Funktionen Laden der Module Die Module Entwicklung eigener Module Die Hilfsdateien Das Makefile Konfiguration Konfigurationsdateien Netzwerkschnittstelle Installation Quellcode Debian Package Debian Paket erstellen Lizenz Testen Betriebsysteme Plattformen Fazit und Ausblick 111 A Datentypen 113 A.1 Der Datentyp Verkettete Liste x

13 INHALTSVERZEICHNIS B Hilfsfunktionen strukturierter Prototyp 119 B.1 Listnode mknode() B.2 Listnode GetNodeByName B.3 void RenumberList B.4 void ShowPlugins() B.5 usage B.6 getoptions B.7 getconfig C Hilfsfunktionen für die Plugins 125 C.1 write to pipe C.2 read from pipe D Inhalt der CD-Rom 127 E Verzeichnisse 131 Abbildungen Tabellen Listings Programme UML-Diagramme Glossar Literatur Stichworte xi

14

15 KAPITEL EINS Einführung The White Rabbit put on his spectacles. Where shall I begin, please your Majesty? he asked. Begin at the beginning,, the King said, very gravely, and go on till you come to the end: then stop. Lewis Carroll 1.1 Danksagung Ich möchte mich in aller Form bei all denen bedanken, die diese Diplomarbeit möglich gemacht haben. An erster Stelle sind hier meine Eltern, Axel und Doris Leibrock zu nennen. Sie haben mir mein Studium ermöglicht und mich immer ideel und finanziell stark unterstützt. Einen besonderen Dank möchte ich Jan Dworschak aussprechen, der mir mit Kaffee, guten Ratschlägen und Korrekturvorschlägen sehr geholfen hat. Grossen Dank gebührt auch Herrn Prof. Dr. Steffens, der mir die Möglichkeit gab, diese Diplomarbeit umzusetzen. Und zuletzt, aber sicher nicht mit der geringsten Bedeutung, ist hier Herr Dipl-Inf. Oliver Keller zu nennen. Er hat mich während der Arbeit immer mit Rat und Tat unterstützt und vor allem im Bereich der Netzwerktechnik stand er immer mit einer hilfreichen Bemerkung zur Seite. 1

16 MOTIVATION 1.2 Motivation Im Rahmen vieler Laborumgebungen im Bereich Netzwerke und Telekommunikation stehen Rechner zur Verfügung, an denen die Teilnehmer Netzwerkverkehr beobachten können, um daran zu lernen. Das Problem hierbei ist, dass nicht immer genau der Traffic zur Verfügung steht, der auch erwünscht ist. Das Ziel dieser Diplomarbeit ist es, dieses Manko zu beseitigen. Durch den Generator, der im Rahmen dieser Arbeit entsteht, kann der Übungsleiter dynamisch Netzwerkverkehr erzeugen lassen, der genau auf seine Bedürfnisse zugeschnitten ist. Um so viele Anforderungen wie möglich erfüllen zu können, muss der Generator sehr modular aufgebaut sein. So können auch noch nach Abschluss dieser Arbeit Module entwickelt und eingebunden werden. Es soll also nachher ein relativ kompakter Kern vorhanden sein, der als Hauptaufgabe die Module verwaltet. Die Funktionalität wiederum ist in den Modulen realisiert Da im Labor für Rechnernetze und Telekommunikation der Fachhochschule ein Routing-Cluster zum Einsatz kommen soll, dessen Knoten unter Linux und/oder OpenBSD laufen, muss die Software unter Linux funktionieren und getestet werden. Eine spätere Portierung nach OpenBSD ist nicht ausgeschlossen. Deswegen wird auf POSIX-Konformität geachtet. Aber nicht nur die Lauffähigkeit unter Linux ist entscheidend. Da im Rahmen der FH Module für den Generator entwickelt werden sollen, muss die Software unter einer freien 1 Lizenz 2 zur Verfügung gestellt werden. Wichtig ist hier, dass der Begriff Netzwerktraffic nicht auf Pakete der Protokolle der OSI-Schichten zwei bis vier beschränkt wird. Auch und vor allem Protokolle höherer Schichten sind in einem Labor dieser Art von Interesse. Beispielhaft seien hier HTTP, SMTP und POP3 genannt. Genaueres zum Aufbau des OSI-Modells ist dem Buch von Tanenbaum [Tan00] zu entnehmen. 1 Im Sinne von 2 GPL, siehe Kapitel 8.4

17 KAPITEL 1. EINFÜHRUNG Schon vorhandene Generatoren Zu Beginn der Arbeit gilt es zu prüfen, ob es schon Software gibt, welche die Anforderungen des Labors erfüllt. Somit wäre keine Eigenentwicklung erforderlich oder es könnte eine bestehende Software weiterentwickelt werden. Eine Suche im Internet nach dem Begriff Traffic Generator führt zu mehreren Millionen Ergebnissen. Daraus gilt es nun Projekte zu finden, welche zu den Anforderungen passen. Neben offensichtlichen Fehlergebnissen wie zum Beispiel und welche anbieten Traffic für die eigene Homepage zu erzeugen um damit Besucher zu simulieren, findet man auch einige Projekte, welche dem Ziel der Suche näher kommen. Diese kann man grob in freie und kommerzielle Projekte unterteilen. Eine Auswahl freier Projekte sieht man in Tabelle 1.1. Projekt Distributed Internet Traffic Generator Real-Time Voice Traffic Generator Network Traffic Generator Mtools IP packets generator(ipgen) The Packet Shell Web-Präsenz msamidi/ projects.htm Tabelle 1.1: freie Projekte zur Erzeugung von Netzwerktraffic Obwohl die Zahl der Projekte, welche sich mit der Erzeugung von Netzwerkverkehr beschäftigen relativ gross ist, ist ihre Ausrichtung relativ gleich gerichtet. Die unteren vier Projekte aus Tabelle 1.1 sind nur in der Lage, Protokolle der OSI-Schichten drei und vier zu erzeugen. Dies ist auch verständlich, denn das Ziel dieser Generatoren ist es, das Netzwerk zu sättigen und so eine Auslastung zu erzeugen. Dies erreicht man am einfachsten mit primitiven Paketen. Deswegen sind die am häufigsten realisierten Protokolle IP und UDP. Einzig IpGen und Packet Shell sind in der Lage auch ICMP-Pakete zu generieren. Im Falle der Packet Shell sogar für IPv6. Wie der Name schon sagt, wurde der Real-Time Voice Traffic Generator dafür entwickelt, Sprachdaten zu erzeugen. Er bedient sich hierzu einfacher UDP-Pakete, welche er entsprechend anpasst. Dieses Projekt simuliert damit zwar eine höhere Schicht, erzeugt aber nur Pakete der niedrigen. Des

18 SCHON VORHANDENE GENERATOREN Weiteren ist das Projekt durch seine Zielsetzung unflexibel und somit für den Einsatz im Labor nicht geeignet. Das Projekt D-ITG (Distributed Internet Traffic Generator) der Universita degli Studi di Napoli Federico II ist das Einzige, welches den Verkehr, welchen es erzeugen soll, durch stochastische Methoden berechnen kann. Das Projekt ist auf Linux und Windows lauffähig, multithreaded und unterstützt die Protokolle TCP, UDP, ICMP, DNS, Telnet, VoIP (G.711, G.723, G.729, Voice Activity Detection, Compressed RTP). Eine Unterstützung weiterer Protokolle (unter anderem SMTP, HTTP, FTP) ist geplant, aber noch nicht realisiert. Leider ist diese Unterstüztung nicht durch ein modulbasiertes System verwirklicht, so dass ein einfaches Nachladen neuer Funktionalitäten nicht möglich zu sein scheint. Dies zeigte eine Analyse des Quellcodes, welcher unter ITG/codice/D-ITG-2.4.zip zur Verfügung steht. Auch wenn in der Motivation erklärt wurde, dass die Software frei sein muss, lohnt es sich im Vorfeld einen Blick auf die kommerziellen Produkte zu werfen, um deren Leistungsfähigkeit einschätzen zu können. Projekt ZTI: IP Traffic - Test & Measure WAN Killer SiteSpy Candela Technologies LANforge-FIRE Network Traffic Generator Web-Präsenz iptraffic-test-measure.htm Miscellaneous/WAN%20Killer/index.htm SiteSpy/SiteSpy.asp lab/network traffic generation/index.cfm Tabelle 1.2: kommerzielle Projekte zur Erzeugung von Netzwerktraffic Leider bedeutet kommerziell nicht unbedingt, dass der Funktionsumfang dem geforderten nahe kommt. Beim ersten Kandidaten ZTI: IP Traffic - Test & Measure fällt gleich auf, dass diese Software nur unter Micosoft Windows einsetzbar ist. Insofern erfüllt sie die Anforderungen des Labors nicht. Zudem kann nur IP-Traffic erzeugt werden. ZIT macht Werbung mit der Aussage, dass IP Traffic is independent of any transmission or telecom link and can use any transmission link managed by the Windows operating system. Dies ist jedoch nicht anders zu erwarten, denn warum sollte eine Software eine vom Betriebsystem bereitgestellte Schnittstelle nicht nutzen können? Der WAN Killer der Firma Solarwinds.net ist ein Vertreter der klassischen

19 KAPITEL 1. EINFÜHRUNG 5 Sättigungstools. Mit ihm kann die Auslastung in vier Schritten (Zitat: 25% 50% 100% or even 150%! ) gesteuert werden. Wie auch immer eine Auslastung von 150 % erreicht wird. Darüber wird leider nicht informiert. Da aber auch hier auf Windows gesetzt wird und keine Module selbst beigesteuert werden können, ist auch diese Software keine Alternative. Die Software SiteSpy schliesst auch kabellose Verbindungen ein. Laut Aussagen des Herstellers Wirelessvalley ist sie besonders für IEEE a/b/g, HomeRF, HiperLAN, or Bluetooth wireless, wired or hybrid networks geeignet. Der Schwerpunkt liegt jedoch laut Homepage auf W-LAN (IEEE a/b/g). Wieder wird hier die Auslastung des Netzwerks als Ziel der Traffic-Erzeugung gesehen. Auch dieses Tool ist zur Planung und zum Test eines neuen Netzwerks geeignet. Zur Erzeugung beliebigen Verkehrs im Sinne der Lehre und Forschung ist es jedoch ungeeignet. Im Leistungsumfang sticht das Produkt LANforge-FIRE Network Traffic Generator der Firma Candela Technologies heraus. Die Erzeugung der verbreitetsten Protokolle wie zum Beispiel FTP, HTTP, VoIP (SIP, RTP, RT- CP), TCP, UDP oder auch Ethernet-Frames ist möglich. Die Software läuft unter Linux und kommt damit den Anforderungen des Labors bisher am nächsten. Leider ist der Quellcode nicht verfügbar und die Erzeugung eigener Module nicht möglich. Somit ist man in der Weiterentwicklung auf die Firma Candela Technologies angewiesen. Fazit Im Bereich der Erzeugung von Netzwerktraffic gibt es vielfältige Projekte. Aber der für das Labor interessante Bereich der höheren Schichten des OSI- Modells wird nur sehr sparsam abgedeckt. Die meisten Generatoren sind für Netzwerktests entwickelt und beschränken sich deswegen auf IP, sowie TCP und/oder UDP. Um ein Netzwerk zu sättigen ist dies zwar die beste Strategie, jedoch ist die Zielsetzung dieser Diplomarbeit eine andere. Einzig ein kommerzielles Produkt deckt diesen Bereich ausreichend ab. Doch hier sind der fehlende Quellcode, und damit die fehlende Möglichkeit der Weiterentwicklung durch Studenten der FH, und die kommerziellen Motive des Herstellers Punkte, die gegen den Einsatz der Software sprechen.

20 AUSSTATTUNG DES LABORS 1.4 Ausstattung des Labors Im Labor für Rechnernetze und Telekommunikation der FH Kaiserslautern, Standort Zweibrücken stehen folgenden Rechner zur Verfügung: Anzahl Rechner 7 AMD Athlon 900 Mhz, 256 MB RAM, 20 GB Festplatte, Windows XP 7 Intel Pentium II 350 MHz, 256 MB RAM, 4 GB Festplatte, Debian GNU/Linux 7 AMD Athlon 800 MHz, 256 MB RAM, 8 GB Festplatte, Windows XP 5 Intel Pentium-MMX 200 MHz, 320 MB RAM, ohne Festplatte, Fli4L 2 Intel Pentium-S 100 MHz, 32 MB RAM, ohne Festplatte, Fli4L Tabelle 1.3: Ausstattung Labor Es stehen sieben Arbeitsplätze mit je vier Rechnern für die Studenten bereit. Die in dieser Arbeit entwickelte Software soll auf den Pentium-II-Rechnern mit Debian GNU/Linux eingesetzt werden. Als Infrastruktur steht eine vollständige Verkabelung der Arbeitsplätze bereit. Diese läuft auf ein Patchfeld im Büro des Assistenten zusammen. Dort stehen auch Cisco-Router und Switches, um die Arbeitsplätze den Anforderungen entsprechend zu verkabeln. Zusätzlich steht pro Arbeitstisch ein Switch zur Verfügung, der eine lokale Verkabelung erlaubt.

21 KAPITEL ZWEI Grundlagen Wer hohe Türme bauen will, muß lange beim Fundament verweilen. Dr. h.c. Anton Bruckner In diesem Kapitel wird erläutert, auf welchem System diese Diplomarbeit entstand und auf welche Art und Weise diese Arbeit gelesen werden sollte. Hierzu gehört die Nomenklatur, welche durchgehend verwendet wird. Aber auch die benutzten graphischen Symbole werden erklärt, um Missverständnisse zu vermeiden. Zudem werden die technischen Grundlagen erläutert, welche unabhängig von den Entscheidungen in Kapitel 3 (Designentscheidungen) verwendet werden. Zu diesen gehört die Art und Weise wie Module während der Laufzeit nachgeladen werden. Weitere Punkte sind das Auswerten der Übergabeparameter und das Einlesen der Konfigurationsdatei. 2.1 Produktionssystem Da das System, wie in Kapitel 1.2 beschrieben, unter Linux entwickelt und getestet wurde, ist als Produktionssystem im Labor der Laptop des Autors mit Debian GNU/Linux eingesetzt worden. Als Compiler wurde der g++ aus der Gnu Compiler Collection (GCC) 1 in Version eingesetzt. Als Hilfe beim Übersetzen wurde GNU make benutzt

22 PROGRAMMIERSPRACHEN Tests unter weiteren Systemen und mit anderen Konfigurationen werden in Kapitel 9 beschrieben. 2.2 Programmiersprachen In die engere Auswahl kamen nur Sprachen, welche auf den oben genannten Systemen eine weite Verbreitung erfahren haben. Somit fiel die Wahl auf C und C++. Java wurde als Interpretersprache von vornherein ausgeschlossen. Zwar ist auch hier Netzwerkprogrammierung möglich, jedoch ist die Verbreitung oben genannter Sprachen grösser. Somit kann man sich auf eine breitere Basis stützen und schon vorhandene Bibliotheken und Implementierungen nutzen, falls dies nötig sein sollte. Die genaue Wahl der Programmiersprache fällt in Kapitel Designentscheidungen. 2.3 Dynamisches Laden von Modulen Ein wesentlicher Punkt bei der Generatorsoftware ist die Modularisierung. Die Module sollen zur Laufzeit des Hauptprogramms dynamisch geladen werden. Die Technik dafür stellen die Funktionen dlopen und dlsym bereit. Da diese Technik unabhängig von der Wahl der Programmiersprache verwendet wird und bei C und C++ identisch ist, wird sie schon an dieser Stelle vorgestellt und nicht erst in der Entwurfsphase des Softwareengineering-Prozesses. Bei den oben genannten Funktionen handelt es sich um die Schnittstellen zum dynamic linking loader. Dieser stellt die Möglichkeit bereit, Symbole aus Bibliotheken dynamisch zu laden, ohne das Programm gegen diese Bibliotheken zu linken. Will man Symbole (zum Beispiel Funktionen) aus Bibliotheken in einem Programm nutzen ist es der übliche Weg, das Programm nach dem Übersetzen statisch oder dynamisch gegen diese Bibliothek zu linken. Es ist jedoch nicht davon auszugehen, dass alle Module schon beim Übersetzen des Kerns bereit stehen. Viel mehr ist es wahrscheinlich, dass später neue Module hinzukommen. Aus diesem Grund ist es notwendig, die Funktionen aus den Modulen (welche später als Bibliotheken realisiert werden) dynamisch verfügbar machen zu können, ohne den Kern neu zu linken.

23 KAPITEL 2. GRUNDLAGEN 9 Um das Prinzip der Symbole genauer zu verstehen ist in Listing 2.1 ein Auszug der Symbole des Kerns dargestellt. Die vollständige Liste lässt sich unter GNU/Linux mit dem Befehl nm <programmdatei> ausgeben a198 T _ZN5CList10getCounterEv a1a4 T _ZN5CList10setCounterEi c64 T _ZN7CPlugin10cPrintListEv f94 W _ZN7CPlugin10getVersionEv ba8 W _ZN7CPlugin10setVersionEPc Listing 2.1: Auszug der Symbolliste des Kerns Man sieht hier den Wert des Symbols in hexadezimaler Darstellung, den Typ und den Namen des Symbols. Bei den Typen steht T dafür, dass das Symbol in der Code-Sektion der Objektdatei steht und W, dass dies ein schwaches Symbol (weak symbol) ist. Wenn ein schwaches Symbol, welches gegen eine regulät definierte Funktion gelinked wurde, so wird diese Funktion ohne Fehler ausgeführt. Sollte die Definition nicht erfolgreich gewesen sein, wäre der Wert des Symbols auf Null geändert worden. In obigem Beispiel wäre eine solche Funktion die Methode getversion der Klasse CPlugin. Dieses Symbol ist hier als schwach bezeichnet, weil die Funktion inline implementiert wurde. Um Symbole nun dynamisch nachladen zu können, kommen die weiter oben genannten Funktionen ins Spiel dlopen Syntax: void *dlopen(const char *filename, int flag); Diese Funktion lädt die dynamische Bibliothek, welche durch den String in filename übergeben wurde. Dieser String enthält den Namen der Datei, welche geladen werden soll. Beginnt dieser String mit einem Slash (/), so wird er als absoluter Pfad gewertet. Ansonsten wird anhand der Parameter von ld (dem Loader für dynamische Bibliotheken) verfahren. Hierzu findet sich mehr in der Man-Page von ld.so 3. Der Parameter flag bestimmt, zu welchem Zeitpunkt die Symbolnamen aufgelöst werden sollen. RTLD NOW besagt, dass alle bisher nicht aufgelösten Symbolnamen aufgelöst werden müssen, bevor dlopen() zurückkehrt. 3 man 8 ld.so

24 DYNAMISCHES LADEN VON MODULEN RTLD LAZY besagt, dass die Symbolnamen erst aufgelöst werden, wenn dies wirklich nötig ist. Als Rückgabewert gibt dlopen() einen void-zeiger als Handler zurück. Falls filename NULL sein sollte, zeigt der Handler auf main. Im Fehlerfall gibt dlopen() NULL zurück dlclose Syntax: int dlclose(void *handle); dlclose() dient zum Schließen der per dlopen() geöffneten Bibliothek. Dazu nimmt sie das passende Handle als Parameter. Sie gibt bei Erfolg 0 zurück. Bei Nichterfolg einen Wert ungleich Null dlsym Mittels der Funktion dlsym() werden die Symbole aus der geöffneten Bibliotheksdatei geladen. Syntax: void *dlsym(void *handle, const char *symbol); Die Funktion nimmt den von dlopen() zurückgegebenen Handler und einen String mit dem zu ladenden Symbolnamen. Ist das Laden des Symbols erfolgreich, gibt dlsym() die Adresse des Symbols im Speicher zurück. Ist das Laden nicht erfolgreich, so wird NULL zurückgegeben. Allerdings könnte die Adresse eines Symbols tatsächlich NULL sein. So braucht man einen Weg um sicherzugehen, ob ein Fehler aufgetreten ist. Die Funktion dlerror() stellt einen solche Funktionalität bereit dlerror Syntax: char *dlerror(void);

25 KAPITEL 2. GRUNDLAGEN 11 dlerror() gibt einen String zurück, in dem im Klartext der letzte Fehler beschrieben wird, der bei einer der dl-funktionen (dlopen, dlsym, dlclose) aufgetreten ist Beispiel Hier wird anhand eines einfachen Beispiels gezeigt, wie eine Funktion ausgelagert und dynamisch während der Laufzeit dazugeladen wird. Zunächst wird die zu ladende Funktion, in diesem Beispiel die Funktion test() implementiert. 1 int test(){ 2 puts("hallo, dies ist die Testfunktion."); 3 return 103; 4 } Listing 2.2: dynamic linking Beispiel: test.c Der Quellcode wird nun übersetzt und gelinked, damit eine Bibliotheksdatei entsteht. Dieses kann später geladen werden. gcc -fpic -shared -o test.so test.c Hierdurch erhält man die Bibliotheksdatei test.so. Der Parameter fpic bewirkt, dass der Compiler Position Indipendend Code erzeugt. Dies bedeutet, dass relative statt absoluter Adressen im Speicher benutzt werden. Damit können diese Bibliotheken auch mehrfach geladen werden. Mit der Option shared wird eingestellt, dass die Bibliothek plattformunabhängig bleibt. Nun zum Hauptprogramm, in dem das Laden stattfindet. Dieses sieht man in Listing 2.3. Hier werden die obigen Funktionen angewandt. Um sie nutzen zu können, wird der Header dlfcn.h eingebunden. Als Erstes werden die Variablen und Typen deklariert, welche später benötigt werden. Wie oben gesehen, gibt dlopen() einen void* zurück. Dieses handle wird - wie nicht anders zu erwarten - in der Variablen handle gespeichert (Zeile 6). Da von dlsym() eine Adresse zurückkommt, nachher aber eine Funktion aufgerufen werden soll, muss ein entsprechender Cast ausgeführt werden. Dazu hilft die Definition eines Hilfstyps intfunc t (Zeile 8). Nun wird die Bibliothek geöffnet (Zeile 11) und damit auch das handle gefüllt. Durch die nachfolgende Fehlerbehandlung wird sichergestellt, dass der Vorgang erfolgreich war (Zeilen 13 bis 16).

26 DYNAMISCHES LADEN VON MODULEN 1 # include <dlfcn.h> 2 # include <stdio.h> 3 4 int main(){ 5 6 void* handle; //handle 7 // typdef wegen cast auf richtigen Typ 8 typedef int (*intfunc_t)(); 9 10 // oeffnen der Bibliothek 11 handle = dlopen("./test.so",rtld_lazy); if(null == handle){ 14 fprintf ( stderr, "Fehler bei dlopen: %s\n", dlerror() ); 15 exit(-1); 16 } //Laden des Symbols "test" 19 intfunc_t testfunc = (intfunc_t) dlsym(handle,"test"); if(null == testfunc){ 22 fprintf (stderr, "Fehler bei dlsym: %s\n", dlerror() ); 23 exit(-2); 24 } else { 25 // ausgeben der Adresse der Funktion und Aufruf der Funktion 26 fprintf (stderr,"adresse von testfunc: %x\n",testfunc ); 27 testfunc(); 28 } dlclose(handle); return 0; 33 } Listing 2.3: dynamic linking Beispiel: main.c War dies erfolgreich, so wird das Symbol test aus der Bibliothek geladen (Zeile 19). Auch hier wird wieder überprüft, ob alles geklappt hat(zeilen 21 bis 24). War das Laden erfolgreich, wird seine Adresse ausgegeben und die Funktion ausgeführt (Zeilen 26,27). Die geöffnete Bibliothek wird wieder geschlossen (Zeile 30) und das Programm beendet sich. Nach dem Übersetzen des Programms mittels gcc -o main -ldl main.c kann main ausgeführt werden. Mittels -ldl wird die Bibliothek zum dynamischen Laden von Modulen dazu gelinkt. Wie man sieht, muss die Test- Bibliothek test.so nicht direkt dazugelinked werden. Hier die Ausgabe auf einer Shell:

27 KAPITEL 2. GRUNDLAGEN 13 Adresse von testfunc: b7fe76bc Hallo, dies ist die Testfunktion. Programm 2.1: Testprogramm - dlopen Das Öffnen der Bibliothek und das Laden des Symbols waren also erfolgreich. 2.4 Auswerten der Übergabeparameter Da das System unter Linux entwickelt wird, wird auch zum Auswerten der Übergabeparameter die unter Linux übliche Variante verwendet. Wie bekannt ist, sind die Übergabeparameter in dem Argument argv 4 der main-funktion enthalten. Nun könnte man einen eigenen Parser für diesen String schreiben. Einfacher und komfortabler ist es jedoch, die Funktion getopt (Aus der Headerdatei getopt.h 5 ) zu verwenden. Eine Übersicht über diese Funktion findet man unter [Lib05d]. Die genaue Implementation für diese Arbeit findet sich in Anhang B.6 für den strukturierten Prototypen. Die Implementierung für die entgültige Version findet man in Kapitel Einlesen der Konfigurationsdatei Auch für diesen Aspekt gibt es zwei grundsätzliche Ansätze. Einerseites könnte man auch hier einen eigenen Parser schreiben, um die Konfiguration auszulesen. Andererseits ist dies eine Funktionalität, welche oft benötigt wird. Also ist es vernünftig anzunehmen, dass es eine Bibliothek gibt, welche diese bereitstellt. 4 int main(int argc, char** argv) 5 Bestandteil der GNU C-Library

28 EINLESEN DER KONFIGURATIONSDATEI CCL Eine solche Bibliothek ist die Customizable Configuration Library (siehe [Boo05]). Den Anspruch der CCL zeigt folgendes Zitat von der Homepage der Bibliothek. ccl is the customizable configuration library, a collection of functions for application programmers wishing to interface with usereditable configuration files containing key/value pairs. ccl is customizable because it allows the comment, key/value, and string literal delimiters to be programatically specified at runtime. ccl is designed to be simple and portable; it has a small interface consisting of five functions and is written in ANSI/ISO C. ccl uses avl s implemenation of binary search trees for backend storage. Einleitung auf [Boo05]. Eine Implementierung für den C-Prototypen finden Sie in Kapitel B.7. Allerdings sieht man in dieser Implementierung, dass es mit Hilfe dieser Bibliothek nur möglich ist, einfache Wertepaare auszuwerten. Eine Unterteilung in Sektionen oder eine andere kontextsensitive Anordnung der Wertepaare ist nicht möglich. Ebenfalls ist es nicht möglich, mehrere Konfigurationsdateien in eine Haupt- Konfigurationsdatei einzubinden. Dies wäre zur Konfiguration der Module hilfreich, denn dann gibt es nicht eine grosse Konfigurationsdatei, sondern eine für jedes Modul, welche dann mittels eines Befehls ähnlich dem #include, wie man ihn aus C oder C++ kennt, eingebunden werden kann. Als erster Ansatz ist diese Bibliothek recht erfolgversprechend. Wie man jedoch beim Test im strukturierten Prototyp (Kapitel B.7) festgestellt hat, reicht der Funktionsumfang nicht völlig an die gestellten Anforderungen heran. libdotconf Für diese Anforderungen braucht man eine Bibliothek, welche sehr viele Freiheiten bereitstellt. Die libdotconf bietet die Möglichkeit, eine Apache 6 - ähnliche Konfigurationsdatei für eigene Programme zu verwenden. 6 Ein Webserver -

PIWIN 1 Übung Blatt 5

PIWIN 1 Übung Blatt 5 Fakultät für Informatik Wintersemester 2008 André Gronemeier, LS 2, OH 14 Raum 307, andre.gronemeier@cs.uni-dortmund.de PIWIN 1 Übung Blatt 5 Ausgabedatum: 19.12.2008 Übungen: 12.1.2009-22.1.2009 Abgabe:

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Erste Schritte mit HG 2

Erste Schritte mit HG 2 Erste Schritte mit HG 2 Malte Ried FH-Gießen Version: 1.0 21. November 2003 Inhaltsverzeichnis 1 Einführung 2 2 Allgemeines 2 2.1 Koordinaten...................................... 2 2.2 Farben.........................................

Mehr

DLLs (dynamic loaded libraries) mit MingW erstellen

DLLs (dynamic loaded libraries) mit MingW erstellen DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:

Mehr

Von der UML nach C++

Von der UML nach C++ 22 Von der UML nach C++ Dieses Kapitel behandelt die folgenden Themen: Vererbung Interfaces Assoziationen Multiplizität Aggregation Komposition Die Unified Modeling Language (UML) ist eine weit verbreitete

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Installation und Benutzung AD.NAV.ZipTools

Installation und Benutzung AD.NAV.ZipTools Installation und Benutzung AD.NAV.ZipTools Version 1.0.0.0 ALTENBRAND Datentechnik GmbH Am Gelicht 5 35279 Neustadt (Hessen) Tel: 06692/202 290 Fax: 06692/204 741 email: support@altenbrand.de Die Komponente

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Funktionen und Parameter

Funktionen und Parameter Funktionen in C++ Funktionen und Parameter Wie in Java: Parameter sind lokale Variablen Argumente werden bei Aufruf zugewiesen Extras: Zeiger-Parameter für alle Typen: als Rückgabewerte um große Kopien

Mehr

Übung 4: Schreiben eines Shell-Skripts

Übung 4: Schreiben eines Shell-Skripts Aufgabenteil 1 Ziel der Übung Übung 4: Schreiben eines Shell-Skripts Anhand eines einfachen Linux-Skripts sollen die Grundlagen der Shell-Programmierung vermittelt werden. Das für die Bash-Shell zu erstellende

Mehr

Grundlagen der Informatik - 6. Praktikum

Grundlagen der Informatik - 6. Praktikum Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

Projekt AGB-10 Fremdprojektanalyse

Projekt AGB-10 Fremdprojektanalyse Projekt AGB-10 Fremdprojektanalyse 17. Mai 2010 1 Inhaltsverzeichnis 1 Allgemeines 3 2 Produktübersicht 3 3 Grundsätzliche Struktur und Entwurfsprinzipien für das Gesamtsystem 3 3.1 Die Prefuse Library...............................

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare

Mehr

Objective-C CheatSheet

Objective-C CheatSheet App-Templates: Erstellt automatisch einen Navigation Controller mit editierbarem UITableView und DetailView, der bei Klick auf einzelne UITableViewCell angezeigt wird. Kreiert einen GLKitViewController

Mehr

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans... Erste Schritte Dieser Teil der Veranstaltung gibt einen ersten Eindruck der Programmierung mit C++. Es wird ein erstes Gefühl von Programmiersprachen vermittelt, ohne auf die gezeigten Bestandteile genau

Mehr

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse

1. Einführung. 2. Vorbereitung zur Installation. 1.1 Eclipse 1. Einführung 1.1 Eclipse Die Eclipse ist eine kostenlose integrierte Entwicklungsumgebung oder auch IDE genannt, (Abkürzung IDE, engl. Integrated development enviroment). Sie ist eine grafische Benutzeroberfläche

Mehr

White Paper. Embedded Treiberframework. Einführung

White Paper. Embedded Treiberframework. Einführung Embedded Treiberframework Einführung White Paper Dieses White Paper beschreibt die Architektur einer Laufzeitumgebung für Gerätetreiber im embedded Umfeld. Dieses Treiberframework ist dabei auf jede embedded

Mehr

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek C++ - Funktionen und mehr Kerstin Gößner und Ralf Wondratschek Übersicht Deklaration, Definition und Initialisierung Variablen- und Konstantendeklaration Funktionsaufrufe und rückgabewerte Technische Grundlage

Mehr

Einführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian

Einführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian Einführung in die Programmierung Arvid Terzibaschian 1 Konstanten 2 Motivation Unveränderliche, wichtige Werte mathematische Konstanten z.b. PI String-Konstanten wie z.b. häufige statische Meldungen mögliche

Mehr

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5.

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. www.heimetli.ch. Heimetli Software AG HSWModule........ Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. August 2005 Inhaltsverzeichnis Was ist HSWModule?... 1 Installation...

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

Einführung in VisualBasic for Applications. Stefan Mahlitz

Einführung in VisualBasic for Applications. Stefan Mahlitz Einführung in VisualBasic for Applications Stefan Mahlitz Stefan Mahlitz Einführung in VBA 27.08.00 Inhaltsverzeichnis 1. Grundlagen der VisualBasic for Applications (VBA) Programmierung...2 1.1 Variablen,

Mehr

Hello World in Java. Der Weg zum ersten Java-Programm

Hello World in Java. Der Weg zum ersten Java-Programm Vorwort Hello World in Java Der Weg zum ersten Java-Programm Diese Anleitung wurde unter Windows XP verfasst. Grundsätzlich sollte sie auch unter späteren Windows Versionen wie Windows Vista oder Windows

Mehr

Programmieren was ist das genau?

Programmieren was ist das genau? Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet

Mehr

Seminararbeit Ruby Uno Kartenspiel

Seminararbeit Ruby Uno Kartenspiel Seminararbeit Ruby Uno Kartenspiel Autor: Fabian Merki Fabian Merki 05.11.2006 1 von 10 Inhaltsverzeichnis Einleitung... 3 Die Idee... 4 Design und Implementierung in Ruby... 5 Testing... 7 Startbefehle...

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Einführung in Automation Studio

Einführung in Automation Studio Einführung in Automation Studio Übungsziel: Der links abgebildete Stromlaufplan soll mit einer SPS realisiert werden und mit Automation Studio programmiert werden. Es soll ein Softwareobjekt Logik_1 in

Mehr

Erste Schritte zum lauffähigen Java Programm

Erste Schritte zum lauffähigen Java Programm Erste Schritte zum lauffähigen Java Programm Diese kleine Einführung ist eine Hilfe für Studenten der Vorlesung SWT I zur Meisterung der sich ergebenden Hürden bei der Erstellung eines ersten kleinen Java-Programms.

Mehr

CORBA. Systemprogrammierung WS 2006-2007

CORBA. Systemprogrammierung WS 2006-2007 CORBA Systemprogrammierung WS 2006-2007 Teilnehmer: Bahareh Akherattalab Babak Akherattalab Inhaltsverzeichnis: Verteilte Systeme Vergleich zwischen lokale und verteilte Systeme Verteilte Anwendungen CORBA

Mehr

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008

Codingstandard. Softwareentwicklung Praktikum Stand: 27.02.2008 I. Einleitung II. Codingstandard Softwareentwicklung Praktikum Stand: 27.02.2008 Wie in der Vorlesung schon ausgeführt wurde, ist die Lesbarkeit und Wartbarkeit des Sourcecodes ein sehr wichtiges Kriterium

Mehr

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik

Programmieren I. Die Programmiersprache Java. www.kit.edu. Institut für Angewandte Informatik Programmieren I Die Programmiersprache Java KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Eigenschaften von Java Java ist eine

Mehr

Generating Fingerprints of Network Servers and their Use in Honeypots. Thomas Apel

Generating Fingerprints of Network Servers and their Use in Honeypots. Thomas Apel Generating Fingerprints of Network Servers and their Use in Honeypots Thomas Apel Der Überblick Fingerprinting von Netzwerkdiensten Banner Verfügbare Optionen Reaktionen auf falsche Syntax Verwendung für

Mehr

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014 Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung Klaus Kusche, September 2014 Inhalt Ziel & Voraussetzungen Was sind abstrakte Datentypen? Was kann man damit grundsätzlich?

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

Karlsruher Institut für Technologie

Karlsruher Institut für Technologie Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt

Mehr

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) {

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) { Universität Mannheim Lehrstuhl für Praktische Informatik 1 Prof. Dr. Felix C. Freiling Dipl.-Inform. Martin Mink Dipl.-Inform. Thorsten Holz Vorlesung Angewandte IT-Sicherheit Herbstsemester 2006 Übung

Mehr

Klausur Kommunikation I. Sommersemester 2003. Dipl.-Ing. T. Kloepfer

Klausur Kommunikation I. Sommersemester 2003. Dipl.-Ing. T. Kloepfer Kommunikation I 1 Klausur Kommunikation I Sommersemester 2003 Dipl.-Ing. T. Kloepfer Bearbeitungsinformationen Aufbau der Klausur Die Klausur ist wie folgt aufgebaut: Die Klausur ist in 18 Aufgaben unterteilt.

Mehr

GUI Programmierung mit Qt

GUI Programmierung mit Qt GUI Programmierung mit Qt C++ vs. JAVA Norman Wolf 22.04.05 GUI Programmierung mit Qt 1 Einleitung Qt wird von der norwegischen Firma Trolltech entwickelt Es ist kommerzielle Software, die aber von Trolltech

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli 2005. MySQL-Job-Automation MySQL-Job-Automation Managed User Jobs JOB SCHEDULER Dokumentation Juli 2005 Software- und Organisations-Service GmbH Giesebrechtstr. 15 D-10629 Berlin Telefon (030) 86 47 90-0 Telefax (030) 861 33 35

Mehr

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 28 Testklasse public class TestGirokonto { public static void main(string[] args) { // erzeuge neues Konto Girokonto einkonto = new Girokonto();

Mehr

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008 PIWIN I Kap. 7 Objektorientierte Programmierung - Einführung 1 PIWIN I Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I Vorlesung 3 SWS WS 2007/2008 FB Informatik

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Dokumentation mit Doxygen

Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Dokumentation mit Doxygen Grundkurs C++ Dokumentation mit Doxygen Doxygen Überblick Grundkurs C++ 2 Doxygen doxygen g Erzeugt Doxyfile Konfigurationsdatei Kann mit Texteditor bearbeitet werden. doxygen Doxyfile Erzeugt Dokumentation

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013

Bakefiles. TgZero Technik.Blosbasis.net. April 1, 2013 TgZero Technik.Blosbasis.net April 1, 2013 1 Inhaltsverzeichnis 1 Makefile 3 1.1 Was sind Makefiles?........................ 3 2 Bakefile 3 3 Aufbau einer Bakefile 4 3.1 Targets...............................

Mehr

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr. ls [optionen] [namen]: ls zeigt den Inhalt von Verzeichnissen. Sind keine namen angegeben, werden die Dateien im aktuellen Verzeichnis aufgelistet. Sind eine oder mehrere namen angegeben, werden entweder

Mehr

C# - PROGRAMME MIT PLUGINS ERWEITERN

C# - PROGRAMME MIT PLUGINS ERWEITERN C# - PROGRAMME MIT PLUGINS ERWEITERN Schreibt man ein Programm welches erweiterbar sein soll, dann gibt es häufig mehrere Möglichkeiten dies umzusetzen. Die Objektorientierung ist dabei der erste Schritt,

Mehr

Embedded-Linux-Seminare. Toolchains

Embedded-Linux-Seminare. Toolchains Embedded-Linux-Seminare Toolchains http://www.embedded-linux-seminare.de Diplom-Physiker Peter Börner Spandauer Weg 4 37085 Göttingen Tel.: 0551-7703465 Mail: info@embedded-linux-seminare.de Kopier-Rechte

Mehr

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg C vs. C++ Sebastian Meyer Universität Hamburg Proseminar C - Grundlagen und Konzepte 2013 1 / 31 Gliederung 1 Einführung 2 Vergleich der Spracheigenschaften 3 Neue Sprachelemente in C++ 4 Fazit 5 Zusammenfassung

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems C A R L V O N O S S I E T Z K Y Boost C++ Libraries Johannes Diemke Department of Computer Science Learning and Cognitive Systems Grundlagen Freie von Experten begutachtete, portable C++ Bibliothek Nützlich,

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Von SystemC zum FPGA in 7 Schritten. Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule

Von SystemC zum FPGA in 7 Schritten. Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule Von SystemC zum FPGA in 7 Schritten Kurzes Tutorial für die Synthese von SystemC Entwürfen auf dem ISMS Server der Hochschule Bremen. Mirko Kruse 21. November 2004 Inhalt 1 Einleitung...1 2 Benötigte Software...1

Mehr

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI Universität Osnabrück Drei-Schichten-Architektur 3 - Objektorientierte Programmierung in Java Vorlesung 6: 3-Schichten-Architektur Fachkonzept - GUI SS 2005 Prof. Dr. F.M. Thiesing, FH Dortmund Ein großer

Mehr

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein.

Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Pfade einstellen Stand: Dezember 2012 Diese Anleitung bezieht sich auf FixFoto, V 3.40. In älteren oder neueren Versionen könnte die Arbeitsweise anders sein. Diese Anleitung soll zeigen, wie man Pfad-Favoriten

Mehr

VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer. Kommunikation I (Internet) Übung 4 PHP

VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer. Kommunikation I (Internet) Übung 4 PHP VWA Rhein-Neckar Dipl.-Ing. Thomas Kloepfer Kommunikation I (Internet) Übung 4 PHP SS 2004 Inhaltsverzeichnis 1. PHP die serverseitige Programmiersprache...1 1.1. PHP - Bereiche in HTML definieren...1

Mehr

Java Einführung Programmcode

Java Einführung Programmcode Java Einführung Programmcode Inhalt dieser Einheit Programmelemente Der erste Programmcode Die Entwicklungsumgebung: Sun's Java Software Development Kit (SDK) Vom Code zum Ausführen des Programms 2 Wiederholung:

Mehr

Technische Beschreibung: EPOD Server

Technische Beschreibung: EPOD Server EPOD Encrypted Private Online Disc Technische Beschreibung: EPOD Server Fördergeber Förderprogramm Fördernehmer Projektleitung Projekt Metadaten Internet Foundation Austria netidee JKU Linz Institut für

Mehr

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz Einführung in das Microsoft.NET-Framework Programmiersprache C# MEF Das Managed Extensibility Framework André Kunz 21.09.2010 1 In dieser Einführung bekommen Sie einen kurzen Einstieg in das.net-framework

Mehr

Spezifikationen und Voraussetzung

Spezifikationen und Voraussetzung Projekt IGH DataExpert Paynet Adapter Spezifikationen Voraussetzungen Datum : 21.07.08 Version : 1.0.0.2 21.07.2008 Seite 1 von 7 Inhaltsverzeichnis 1 Einleitung... 3 2 Architektur... 3 2.1 Grundsätze

Mehr

Der C++ Crashkurs v1.0

Der C++ Crashkurs v1.0 Der C++ Crashkurs v1.0 Daniel Stöckel, M. Sc. October 14, 2013 1 Grundlegendes 1.1 Das erste Programm Wir beginnen mit einem einfachen Hello world Programm. Listing 1: hello world.cpp // Einbinden der

Mehr

Hello world. Sebastian Dyroff. 21. September 2009

Hello world. Sebastian Dyroff. 21. September 2009 Hello world Sebastian Dyroff 21. September 2009 1 / 35 Inhaltsverzeichnis Organisatorisches Hello World Typen und Operatoren Programmfluss Weitere Konstrukte Nützliche Tipps 2 / 35 Inhalte dieser Veranstaltung

Mehr

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java Willkommen zur Vorlesung Objektorientierte Programmierung Vertiefung - Java Zum Dozenten Mein Name: Andreas Berndt Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

L4. Erster Schritt zum Programmieren

L4. Erster Schritt zum Programmieren L4. Erster Schritt zum Programmieren 1 Programmierung in Hoch Beispielprogramme in FORTRAN, PASCAL und C Die Programmiersprache C Erstellung und Übersetzung eines C-Programms Das Programm Hello World Eingabe

Mehr

Spezifikationen und Voraussetzung

Spezifikationen und Voraussetzung Projekt IGH DataExpert Yellowbill Adapter Spezifikationen Voraussetzungen Datum : 22.08.2013 Version : 1.0.0.2 22.08.2013 Seite 1 von 7 Inhaltsverzeichnis 1 Einleitung...3 2 Architektur...3 2.1 Grundsätze

Mehr

Knowledge Base SIP-Konfiguration auf der Fortigate

Knowledge Base SIP-Konfiguration auf der Fortigate Datum 05/01/2011 09:21:00 Hersteller Fortinet Modell Type(n) Fortigate Firmware v4.2 Copyright Boll Engineering AG, Wettingen Autor Sy Dokument-Version 1.0 Situation: SIP-Traffic auf einer Firewall zuzulassen

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung OOP Programmieren mit Java Aufgaben: 2 JDK/SDK/JRE und Java Entwicklungswerkzeuge Objektorientierte Programmierung OOP Programmieren mit Java 1. Installation von Java 2. Erstes Java Programm Hello World 3. Dreimal Hallo Olten 2

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

Kurzanleitung CodeBlocks zur C-Programmierung. In dieser Kurzanleitung wird anhand zweier Beispiele beschrieben, wie C-Programme mit der

Kurzanleitung CodeBlocks zur C-Programmierung. In dieser Kurzanleitung wird anhand zweier Beispiele beschrieben, wie C-Programme mit der Fakultät für Ingenieurwissenschaften und Informatik Labor für Digital- und Mikroprozessortechnik, Juli 2015 Kurzanleitung CodeBlocks zur C-Programmierung In dieser Kurzanleitung wird anhand zweier Beispiele

Mehr

lome6 (Lights-Out-Management-Ether6) by warhog 2011

lome6 (Lights-Out-Management-Ether6) by warhog <warhog@gmx.de> 2011 lome6 (Lights-Out-Management-Ether6) by warhog 2011 Inhaltsverzeichnis 1 GPL...2 2 Einleitung...3 3 Funktionen...3 4 Erster Prototyp...4 5 Hardware...4 6 Software...5 6.1 Ethersex...5 6.2

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 7 Prof. R. Westermann, A. Lehmann, R.

Mehr

Graphing - SNMP DATA - MRTG II

Graphing - SNMP DATA - MRTG II Graphing - SNMP DATA - MRTG II Netzwerkmanagement Software hat sich in den letzten Jahren vom hilfreichen Produkt zur integralen Grundlage für den professionellen IT Betrieb gewandelt. Grosse und leistungsfähige

Mehr

Lösung Übungszettel 6

Lösung Übungszettel 6 Lösungen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik SS 03 AG Betriebssysteme FB3 Kirsten Berkenkötter Lösung Übungszettel 6 1 Aufgabe 1: Parallel-Server 1.1 Client #include

Mehr

Agenda. Einleitung Produkte vom VMware VMware Player VMware Server VMware ESX VMware Infrastrukture. Virtuelle Netzwerke

Agenda. Einleitung Produkte vom VMware VMware Player VMware Server VMware ESX VMware Infrastrukture. Virtuelle Netzwerke VMware Server Agenda Einleitung Produkte vom VMware VMware Player VMware Server VMware ESX VMware Infrastrukture Virtuelle Netzwerke 2 Einleitung Virtualisierung: Abstrakte Ebene Physikalische Hardware

Mehr

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich: Source-Files Programm == Source-File nicht sinnvoll Unübersichtlich Bei jeder kleinen Änderung gesamtes File neu übersetzen Übersetzen dauert lange Keine Gruppenarbeit möglich Programm in Source-Files

Mehr

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org)

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Dynamische Plug-ins mit Eclipse 3 Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Überblick Die Ausgangslage Dynamische Plug-ins Warum? Eclipse 3 Die OSGi-basierte

Mehr

3827260108 Private Homepage vermarkten So laden Sie Ihre Website auf den Server Das lernen Sie in diesem Kapitel: n So funktioniert FTP n Diese FTP-Programme gibt es n So laden Sie Ihre Website mit WS-FTP

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

webpdf für VMware SoftVision Development GmbH Kurfürstenstraße 15 36037 Fulda, Deutschland Tel.: +49 (0)661 25100-0 Fax: +49 (0)661 25100-25

webpdf für VMware SoftVision Development GmbH Kurfürstenstraße 15 36037 Fulda, Deutschland Tel.: +49 (0)661 25100-0 Fax: +49 (0)661 25100-25 webpdf für VMware SoftVision Development GmbH Kurfürstenstraße 15 36037 Fulda, Deutschland Tel.: +49 (0)661 25100-0 Fax: +49 (0)661 25100-25 E-Mail: sales@softvision.de Web: www.softvision.de Inhaltsverzeichnis

Mehr

Versionsverwaltung mit CVS

Versionsverwaltung mit CVS Versionsverwaltung mit CVS Steffen Schäfer Michael Velten 27. Juni 2004 Reihe Berichte zur Softwaretechnik Herausgeber: Prof. Dr. Ulrich Eisenecker, Fachhochschule Kaiserslautern, Standort Zweibrücken,

Mehr

IPCOP OPENVPN TUTORIAL

IPCOP OPENVPN TUTORIAL IPCOP OPENVPN TUTORIAL von Blue nach Green über VPN mit installiertem BOT Zerina Plugin 0.9.4b und OPENVPN GUI auf IPCOP 1.4.10 http://www.ipcop.org http://www.carinthian-linux.at http://www.openvpn-forum.de

Mehr

Inhalt: Version 1.7.5

Inhalt: Version 1.7.5 Inhalt: Objekte ohne Methoden Objekte mit einfachen Methoden Objekte und Methoden mit Parametern Objekte und Methoden mit Rückgabewert Objekte mit einem Array als Attribut Beziehungen zwischen Objekten

Mehr