Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Über die Autoren
Über dieses Buch
Linux vs. BSD
1 Der Kernel
2 Die Grundlagen aus Anwendersicht
3 Die Shell
4 Reguläre Ausdrücke
5 Tools zur Dateibearbeitung
6 Die Editoren
7 Shellskriptprogrammierung
8 Benutzerverwaltung
9 Grundlegende Verwaltungsaufgaben
10 Netzwerk-Grundlagen
11 Anwendersoftware für das Netzwerk
12 Netzwerkdienste
13 Mailserver unter Linux
14 LAMP
15 DNS-Server
16 Secure Shell
17 Die grafische Oberfläche
18 Window-Manager und Desktops
19 X11-Programme
20 Multimedia und Spiele
21 Softwareentwicklung
22 Crashkurs in C und Perl
23 Sicherheit
24 Prozesse und IPC
25 Bootstrap und Shutdown
26 Dateisysteme
27 Virtualisierung und Emulatoren
A Die Installation
B Lösungen zu den einzelnen Aufgaben
C Kommandoreferenz
D X11-InputDevices
E MBR
F Die Buch-DVDs
G Glossar
H Literatur

Download:
- ZIP, ca. 6,3 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Linux von Johannes Plötner, Steffen Wendzel
Das distributionsunabhängige Handbuch
Buch: Linux

Linux
2., aktualisierte und erweiterte Auflage
1119 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1090-4
gp 21 Softwareentwicklung
  gp 21.1 Interpreter und Compiler
    gp 21.1.1 C und C++
    gp 21.1.2 Perl
    gp 21.1.3 Java
    gp 21.1.4 Tcl
    gp 21.1.5 Was es sonst noch gibt
  gp 21.2 Shared Libraries
    gp 21.2.1 Vorteile der Shared Libraries
    gp 21.2.2 Statisches Linken
    gp 21.2.3 Die Dateien
  gp 21.3 Debugging
    gp 21.3.1 Vorbereitung
    gp 21.3.2 Konsolenarbeit
    gp 21.3.3 ddd
  gp 21.4 Profiling
    gp 21.4.1 Compileroption
    gp 21.4.2 gprof verwenden
    gp 21.4.3 Profiling-Daten lesen
  gp 21.5 Tracing
  gp 21.6 Hilfe beim Finden von Bugs
    gp 21.6.1 ProPolice
    gp 21.6.2 flawfinder und RATS
    gp 21.6.3 Electric Fence
  gp 21.7 Integrierte Entwicklungsumgebungen
  gp 21.8 make
    gp 21.8.1 Makefile
    gp 21.8.2 Makefile-Makros
    gp 21.8.3 Shell-Variablen in Makefiles
    gp 21.8.4 Einzelne Targets übersetzen
    gp 21.8.5 Spezielle Targets
    gp 21.8.6 Tipps im Umgang mit make
  gp 21.9 Die GNU Autotools
  gp 21.10 lex/flex und yacc/bison
    gp 21.10.1 flex grundlegend anwenden
    gp 21.10.2 bison/yacc grundlegend anwenden
  gp 21.11 Unix-Software veröffentlichen
    gp 21.11.1 Wichtige Dateien
  gp 21.12 Manpages erstellen
    gp 21.12.1 groff nutzen
    gp 21.12.2 Die Manpage installieren
  gp 21.13 Versionsmanagement
    gp 21.13.1 CVS
    gp 21.13.2 Subversion
  gp 21.14 Wichtige Bibliotheken
    gp 21.14.1 Entwicklung grafischer Oberflächen
    gp 21.14.2 Weitere Bibliotheken
  gp 21.15 Zusammenfassung
  gp 21.16 Aufgaben

Analysieren heißt, etwas kaputt machen unter dem Vorwand, man wolle nachsehen, wie es arbeitet. -- Anonym

21 Softwareentwicklung

Nun werden wir uns der Thematik »Softwareentwicklung unter Unix« annehmen, wobei unser Hauptaugenmerk natürlich auf Linux und BSD liegen wird. Die meisten Programme, die wir Ihnen in diesem Kapitel vorstellen, sind allerdings auch unter anderen Unix(-ähnlichen) Systemen, etwa Solaris, lauffähig.

Zunächst werden wir Ihnen einen Überblick über die Interpreter und Compiler verschaffen, die Ihnen zur Verfügung stehen. Danach werden Sie sowohl in die Programmiersprache C als auch in die Sprache Perl eingeführt, da diese beiden Sprachen neben der Shellskriptprogrammierung unter Linux, Unix und BSD die wichtigsten Werkzeuge eines Programmierers sind.

Neben den Interpretern und Compilern stellt Linux durch Tools wie make, diverse Editoren und IDEs, yacc und flex, cvs und svn, tonnenweise Libraries, den GNU-Debugger gdb und den GNU-Profiler gprof weitere wichtige Tools zur Softwareentwicklung bereit, bei denen eigentlich kein wichtiger Wunsch unerfüllt bleiben sollte. Natürlich werden wir Ihnen auch auch diese Tools in diesem Kapitel vorstellen.


Galileo Computing

21.1 Interpreter und Compiler  downtop

Es ist fast egal, welche Programmiersprache Sie bisher verwendet haben. Unter Linux kann fast jede Sprache, sofern diese nicht gerade systemabhängig ist (etwa Windows-Batch oder Visual-Basic), weiterverwendet werden. Und damit sind nicht nur die Sprachen gemeint, die sowieso weit verbreitet sind – etwa C, C++, Java, Ruby, Perl, Python, Tcl oder Fortran. Nein, auch Erlang, LUA, Common-Lisp, Scheme und andere Exoten können problemlos (und in der Regel sogar frei) angewandt werden.


Galileo Computing

21.1.1 C und C++  downtop

Für die Sprachen C und C++ wird in aller Regel auf die Open-Source-Compilersoftware des GNU-Projekts zurückgegriffen. Für die Übersetzung der C-Programme wird dabei der gcc (GNU-C-Compiler) und für C++ der g++ verwendet.

Gegeben seien zwei Dateien, datei1.c und datei2.c. In Ersterer wird eine Funktion implementiert, die aus der zweiten aufgerufen wird. An diesem Beispiel kann man sehr einfach demonstrieren, wie man beim gcc miteinander verlinkt. Doch hier erst einmal beide Dateien:

$ cat datei1.c 
#include <stdio.h> 
 
void 
out(char *str) 
{ 
        printf("%s\n", str); 
} 
$ cat datei2.c 
void out(char *); 
 
int 
main(int argc, char *argv[]) 
{ 
        out("Hello, gcc!"); 
        return 0; 
}

Listing 21.1    datei1.c und datei2.c

Objektdateien

Zunächst erstellen wir Objektdateien der Quelldateien. Dies wird mit der Option -c bewerkstelligt. Daraufhin erstellt der gcc zwei Dateien mit der Endung .o – die besagten Objektdateien.

$ gcc -c datei1.c 
$ gcc -c datei2.c 
$ ls *.o 
datei1.o datei2.o

Listing 21.2    Objektdateien erstellen

Diese beiden Objektdateien werden nun zu einem Programm zusammengelinkt, wobei der Name des Programms angegeben werden sollte, was mit der Option -o (out) realisiert wird. Lässt man diese Option weg, erstellt gcc eine Binärdatei im ELF-Format mit dem Namen ./a.out.

$ gcc -o prog datei1.o datei2.o 
$ ./prog 
Hello, gcc!

Listing 21.3    Linken

Diese beiden Vorgänge lassen sich auf der Kommandozeile jedoch auch vereinfachen, indem man gar nicht erst den Befehl zum Erstellen von Objektdateien übergibt, sondern gleich die Binärdatei zusammenlinkt – der Compiler erledigt den Rest dann intern.

$ gcc -o prog datei1.c datei2.c 
$ ./prog 
Hello, gcc!

Listing 21.4    Der schnelle Weg

Der Übersetzungsvorgang ist mit dem C++-Compiler im Übrigen gleich. Ersetzen Sie einfach mal in den obigen Listings gcc durch g++. Sie werden feststellen, dass das Resultat (eine ausführbare Datei) das gleiche ist.

Verzeichnisse

Oftmals bedarf es jedoch, und das ist bei etwas größeren Projekten eigentlich immer der Fall, einer individuellen Anpassung der Compileroptionen. Der GNU-Compiler unterstützt davon auch äußerst viele, doch wollen wir an dieser Stelle nur die wirklich wichtigen besprechen.

Header-Pfade

Zunächst kann durch die Option -I ein Verzeichnis, in dem sich Header-Dateien befinden, angegeben werden, das der gcc dann nach einer entsprechenden Datei durchsucht, die bei einer include-Anweisung angegeben wird.

Die Include-Pfade können dabei sowohl absolut als auch relativ angegeben werden. Möchten Sie mehrere solcher Include-Pfade mit einbeziehen, so kann dies durch eine Aneinanderreihung von -I-Optionen umgesetzt werden.

$ gcc -o prog -Isrc/include -I../src/include \ 
-I../lib/src/include datei1.c datei2.c}

Listing 21.5    -I

Library-Pfade

Was für Headerdateien mit der Option -I bewerkstelligt wird, funktioniert für Libraries mit der Option -L: Damit können Pfade angegeben werden, in denen nach Library-Dateien gesucht werden soll.

$ gcc -o prog -L/usr/local/lib datei1.c datei2.c

Listing 21.6    -L

Libraries verwenden

Nachdem Sie nun wissen, wie man Verzeichnisse angeben kann, in denen Library-Dateien liegen, können wir Ihnen natürlich nicht vorenthalten, wie Libraries überhaupt eingelinkt werden. Dies funktioniert nämlich mit der Option -l. Dahinter setzt man dann den Namen der gewünschten Library und fertig »is dat janze«.

Möchte man beispielsweise mit der PCAP-Library arbeiten, einer Library zum Abfangen von Datenpaketen auf Netzwerk-Schnittstellen, kann diese durch einen Aufruf wie

$ gcc -Wall -o tcptool tcptool.c -lpcap

Listing 21.7    pcap nutzen

eingelinkt werden.


Galileo Computing

21.1.2 Perl  downtop

Bei Perl (Practical Extraction and Report Language) handelt es sich um eine äußerst mächtige Skriptsprache, mit der man unter Linux, BSD und Unix eigentlich fast alles machen kann, wenn es sich dabei nicht gerade um Kernel-Programmierung handelt. Nebenbei gesagt ist Perl aufgrund der hohen Portabilität auch für andere Betriebssysteme, etwa Windows, verfügbar. Zudem werden häufig Webseiten mit Perl realisiert.

Neben dem Einsatz in der System- und Netzwerkprogrammierung gibt es auch Möglichkeiten, mit Perl durch einige Libraries GUI-Programme für X11 zu schreiben. Perl kann übrigens auch als hervorragender Ersatz zur Shellskriptprogrammierung angesehen werden, da auch in Perl sehr schnell Skripts realisiert werden können. Ob man sich nun letztendlich für Perl oder doch eher für die Shellskriptprogrammierung (am besten mit awk und sed) entscheidet, hängt wohl vom persönlichen Geschmack ab.

Standardmäßig sollte jede Linux-Distribution und jedes BSD-Derivat einen Perl-Interpreter in der Standardinstallation beinhalten. Ob Perl, und wenn ja, welche Version von Perl auf Ihrem System installiert, ist bekommen Sie durch einen Aufruf von perl -v heraus.

$ perl -v 
 
This is perl, v5.8.5 built for i386-openbsd 
 
Copyright 1987-2004, Larry Wall 
 
Perl may be copied only under the terms of either the 
Artistic License or the GNU General Public License, 
which may be found in the Perl 5 source kit. 
 
Complete documentation for Perl, including FAQ lists, 
should be found on this system using `man perl' or 
`perldoc perl'.  If you have access to the Internet, 
point your browser at http://www.perl.com/, the Perl 
Home Page. 
 
$ perl -e 'print "Hello, World!\n";' 
Hello, World!

Listing 21.8    perl -v

perldoc

Neben der Perl-Manpage bietet das Tool perldoc noch weitere Informationen zur Skriptsprache. So finden sich beispielsweise Informationen zur Anwendung diverser Perl-Module in perldoc. Dabei wird der Modulname als Parameter übergeben.

$ perldoc CGI

Listing 21.9    perldoc


Galileo Computing

21.1.3 Java  downtop

Java ist wie C++ eine objektorientierte Programmiersprache. Entwickelt wurde die Programmiersprache von SUN Microsystems, die Entwicklung mit ihr ist jedoch frei. Der Unterschied zwischen Java und den meisten anderen Sprachen ist der, dass Java nicht wirklich als Skript interpretiert und auch nicht wirklich zu einem Binärprogramm übersetzt wird. Java-Code wird vom Java-Compiler (javac) in eine Bytecode-Datei übersetzt.

Eine Bytecode-Datei kann dann auf verschiedenen Systemen vom Java-Interpreter interpretiert werden. Diese »plattformunabhängige« Programmierung ist eines der gepriesenen Features dieser Sprache. Außerdem können mit Java WebApplets entwickelt werden. Dass Java dabei ziemlich lahm ist und auch sonst einige Einschränkungen hat, erzählt einem jedoch meistens niemand.

Die Tools

Möchten Sie unter Linux mit Java arbeiten, benötigen Sie dazu das Java-Development-Kit (JDK) von SUN Microsystems. Die meisten Distributionen bringen diese Software als Paket mit. Andernfalls können Sie das JDK auch von sun.com herunterladen.

Wir wollen an dieser Stelle exemplarisch ein kleines Java-Programm übersetzen und ausführen. Zunächst wird eine Java-Datei erstellt, der wir die Endung .java verpassen.

$ cat << EOF >hello.java 
class Hello 
{ 
   public static void main(String args[]) 
   { 
      System.out.println("Hello World!"); 
   } 
} 
EOF

Listing 21.10    hello.java

Anschließend wird diese Datei mit dem Java-Compiler übersetzt, der uns eine Datei mit der Endung .class erzeugt.

$ javac hello.java

Listing 21.11    hello.java wird übersetzt.

Nun kann unser Programm durch java ausgeführt werden.

$ java hello 
Hello World!

Listing 21.12    java arbeitet.


Galileo Computing

21.1.4 Tcl  downtop

Bei Tcl (»Tool Command Language«) handelt es sich um eine sehr schnell erlernbare Skriptsprache. Aufgrund der hohen Portabilität ist Tcl, wie auch Perl, auch auf Windows-Systemen verfügbar.

Mit der Tk-Library lassen sich mit Tcl besonders schnell und einfach grafische Oberflächen für Skripts realisieren. Tk kann auch in Verbindung mit Perl und C verwendet werden, wobei wir Ihnen basierend auf unserer persönlichen Erfahrung von der Kombination Tk und C abraten. <C in Verbindung mit der Tk-Library ist eine Zumutung. Wir stellen Ihnen später besser zu handhabende Libraries (Qt und Gtk) vor, die auf die Programmiersprachen C++ und C zugeschnitten sind.>

In der Regel gehört der Tcl-Interpreter nicht zum Umfang einer Basisinstallation, wird jedoch als Package und/oder in den Ports fast jeder Distribution bzw. fast jedes Derivats angeboten.

Der Interpreter nennt sich tclsh oder tcl-Versionsnummer. Sollte auf Ihrem System etwa Version 8.4 des Tcl-Interpreters installiert sein, würde der Interpreter tclsh8.4 heißen.

Die Syntax von Tcl kann als Mix aus Bourne-Shell und awk angesehen werden; hier sehen Sie ein kleines Beispiel für die Implementierung und Anwendung einer Funktion, die das Quadrat einer Zahl zurückgibt.

$ tclsh8.4 
% proc quad { x \ { 
   return [expr $x*$x] 
}} 
% quad 7 
49 
% quad 12 
144 
% exit

Listing 21.13    tcl anwenden

wish

Möchte man nun grafische Oberflächen für seine Skripts erstellen, funktioniert das in Verbindung mit dem Tk-Interpreter wish. Auch dessen Binary wird oft mit einer Versionsnummer versehen, also etwa wish8.4.

Das Skripting funktioniert dabei recht einfach: Es wird ein Element des Fensters definiert, etwa ein Push-Button. Dieser wird mit Eigenschaften versehen und dann in das Fenster gepackt. Die Syntax ist dabei in einer sehr einfach verständlichen Form gehalten:

$ wish8.4 
% button .b1 -text "Hallo, Leser" \ 
   -command { put "Hallo, Leser!\n" }} 
.b1 
% button .b2 -text "Beenden" -command { exit } 
.b2 
% pack .b1 
% pack .b2 
%

Listing 21.14    Buttons mit wish

Dieses kleine Skript erzeugt zwei Buttons. Der erste erhält die Aufschrift »Hallo, Leser« und gibt den Text »Hallo, Leser!« auf der Konsole aus, wenn er gedrückt wird. Der zweite Button mit der Aufschrift »Beenden« beendet das Programm. Nachdem Sie diese Befehle in wish ausgeführt haben, erscheint unter X11 auf dem Bildschirm ein Fenster wie dieses:

Abbildung 21.1    Das obige Skript ausgeführt


Galileo Computing

21.1.5 Was es sonst noch gibt  toptop

Neben C(++), Java, Perl, Tcl und diversen Shellskriptsprachen stehen Ihnen unter Linux und BSD noch diverse weitere Sprachen und Interpreter zur Verfügung, die in aller Regel ebenfalls frei und offen verfügbar sind. Im Folgenden seien nur die wichtigsten genannt:

  • verschiedene Assembler (speziell GNU-Assembler und nasm)
  • Common Lisp (clisp), ein portabler, performanter Lisp-Dialekt sowie weitere Lisp-Dialekte wie Emacs-Lisp oder Scheme
  • ANSI FORTRAN 77 (g77)
  • Smalltalk (z. B. GNU Smalltalk)
  • Ruby (ähnlich wie Perl)
  • Erlang (eine funktionale Sprache von Ericson – leider schlecht dokumentiert)
  • Python
  • LUA
  • Yorick (eine Sprache aus der Physik mit sehr einfacher Syntax)


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Linux






 Linux
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Einstieg in Linux






 Einstieg in Linux


Zum Katalog: Debian GNU/Linux






 Debian GNU/Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: Praxisbuch Netzwerk-Sicherheit






 Praxisbuch
 Netzwerk-Sicherheit


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de