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

Inhaltsverzeichnis
Vorwort
1 Einleitung
TEIL I: Einstieg in Linux
2 Die Installation
3 Erste Schritte
4 Linux als Workstation für Einsteiger
TEIL II: Grundlagen
5 Kernel
6 Grundlagen aus Anwendersicht
TEIL III: Die Shell
7 Die Shell
8 Reguläre Ausdrücke
9 Konsolentools
10 Die Editoren
11 Shellskriptprogrammierung mit der bash
12 Die C-Shell
TEIL IV: System- & Netzwerkadministration
13 Benutzerverwaltung
14 Grundlegende Verwaltungsaufgaben
15 Netzwerkgrundlagen
16 Anwendersoftware für das Netzwerk
17 Netzwerkdienste
18 Mailserver unter Linux
19 LAMP & Co.
20 DNS-Server
21 Secure Shell
TEIL V: Die grafische Oberfläche
22 Die grafische Oberfläche
23 Window-Manager und Desktops
24 X11-Programme
25 Multimedia und Spiele
TEIL VI: Systeminterna
26 Prozesse und IPC
27 Bootstrap und Shutdown
28 Dateisysteme
29 Virtualisierung und Emulatoren
TEIL VII: Programmierung und Sicherheit
30 Softwareentwicklung
31 Crashkurs in C und Perl
32 Einführung in Computersicherheit
33 Netzwerksicherheit überwachen
TEIL VIII: Anhang
A Lösungen zu den einzelnen Aufgaben
B Kommandoreferenz
C X11-InputDevices
D MBR
E Buch-DVDs
F Glossar
G Literatur
Stichwort
Ihre Meinung?

Spacer
Linux von Johannes Plötner, Steffen Wendzel
Das umfassende Handbuch
Buch: Linux

Linux
Rheinwerk Computing
1282 S., 5., aktualisierte Auflage 2012, geb., mit 2 DVDs
49,90 Euro, ISBN 978-3-8362-1822-1
Pfeil 30 Softwareentwicklung
Pfeil 30.1 Interpreter und Compiler
Pfeil 30.1.1 C und C++
Pfeil 30.1.2 Perl
Pfeil 30.1.3 Java
Pfeil 30.1.4 Tcl
Pfeil 30.1.5 Was es sonst noch gibt
Pfeil 30.2 Shared Libraries
Pfeil 30.2.1 Vorteile der Shared Libraries
Pfeil 30.2.2 Statisches Linken
Pfeil 30.2.3 Dateien
Pfeil 30.3 Debugging
Pfeil 30.3.1 Vorbereitung
Pfeil 30.3.2 Konsolenarbeit
Pfeil 30.3.3 DDD
Pfeil 30.4 Profiling
Pfeil 30.4.1 Compiler-Option
Pfeil 30.4.2 gprof verwenden
Pfeil 30.4.3 Profiling-Daten lesen
Pfeil 30.5 Tracing
Pfeil 30.6 Hilfe beim Finden von Bugs
Pfeil 30.6.1 ProPolice
Pfeil 30.6.2 Flawfinder und RATS
Pfeil 30.6.3 Electric Fence
Pfeil 30.7 Integrierte Entwicklungsumgebungen
Pfeil 30.8 Make
Pfeil 30.8.1 Makefile
Pfeil 30.8.2 Makros
Pfeil 30.8.3 Shellvariablen in Makefiles
Pfeil 30.8.4 Einzelne Targets übersetzen
Pfeil 30.8.5 Spezielle Targets
Pfeil 30.8.6 Tipps im Umgang mit Make
Pfeil 30.9 Die GNU Autotools
Pfeil 30.10 lex/flex und yacc/bison
Pfeil 30.10.1 flex grundlegend anwenden
Pfeil 30.10.2 bison/yacc grundlegend anwenden
Pfeil 30.11 Unix-Software veröffentlichen
Pfeil 30.12 Manpages erstellen
Pfeil 30.12.1 groff nutzen
Pfeil 30.12.2 Manpages installieren
Pfeil 30.13 Versionsmanagement
Pfeil 30.13.1 CVS
Pfeil 30.13.2 Subversion
Pfeil 30.13.3 Git
Pfeil 30.14 Wichtige Bibliotheken
Pfeil 30.14.1 Entwicklung grafischer Oberflächen
Pfeil 30.14.2 Weitere Bibliotheken
Pfeil 30.15 Zusammenfassung
Pfeil 30.16 Aufgaben

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

30 SoftwareentwicklungZur nächsten Überschrift

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 wie zum Beispiel Solaris lauffähig.

Zunächst werden wir Ihnen einen Überblick über die Interpreter und Compiler verschaffen, die zur Verfügung stehen. Danach führen wir Sie sowohl in die Programmiersprache C als auch in die Sprache Perl ein, 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 Subversion, 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 diese Tools in diesem Kapitel vorstellen.


Rheinwerk Computing - Zum Seitenanfang

30.1 Interpreter und CompilerZur nächsten ÜberschriftZur vorigen Überschrift

Es ist fast gleichgültig, 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. Das gilt nicht nur für die Sprachen, die sowieso weit verbreitet sind – wie zum Beispiel C, C++, Java, Ruby, Perl, Python, Tcl oder Fortran. Nein, auch Erlang, Lua, CommonLisp, Scheme und andere Exoten können problemlos (und in der Regel sogar frei) angewandt werden.


Rheinwerk Computing - Zum Seitenanfang

30.1.1 C und C++Zur nächsten ÜberschriftZur vorigen Überschrift

Für die Sprachen C und C++ greift man in aller Regel auf die Open-Source-Compiler-Software des GNU-Projekts zurück. 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 mit dem GCC linkt. Betrachten wir erst einmal beide Dateien:

Listing 30.1 datei1.c und datei2.c

$ 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;
}

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.

Listing 30.2 Objektdateien erstellen

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

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

Listing 30.3 Linken

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

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

Listing 30.4 Der schnelle Weg

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

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

Verzeichnisse

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

Header-Pfade

Zunächst kann durch die Option -I ein Verzeichnis angegeben werden, in dem sich Headerdateien befinden. Der Präprozessor des gcc durchsucht dieses dann nach einer entsprechenden Datei, die bei einer C-#include-Direktive 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.

Listing 30.5 Die Option -I

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

Library-Pfade

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

Listing 30.6 Die Option -L

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

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 grundsätzlich 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«.

Um beispielsweise mit der PCAP-Library zu arbeiten, einer Library zum Abfangen von Datenpaketen auf Netzwerkschnittstellen, linken Sie diese durch den folgenden Aufruf ein:

Listing 30.7 pcap nutzen

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

Rheinwerk Computing - Zum Seitenanfang

30.1.2 PerlZur nächsten ÜberschriftZur vorigen Überschrift

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 – sofern es sich dabei nicht gerade um Kernel-Programmierung handelt. Nebenbei gesagt ist Perl aufgrund der hohen Portabilität auch für andere Betriebssysteme wie zum Beispiel 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 und einigen Libraries GUI-Programme für X11 zu schreiben. Perl ist übrigens auch ein hervorragender Ersatz zur Shellskriptprogrammierung, da auch in dieser Sprache sehr schnell Skripte 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 primär vom persönlichen Geschmack ab. Während Sie in der Shell in der Regel schneller das gewünschte Resultat erzielen, ist der Entwicklungsaufwand in Perl höher. Dafür ist Perl-Code performanter und die Sprache bietet zudem systemnähere Entwicklungsmöglichkeiten. Perl kann als Zwischenebene zwischen der Shellskriptprogrammierung und der C-Programmierung betrachtet werden.

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

Listing 30.8 perl -v

$ 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!

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.

Listing 30.9 Das Tool perldoc

$ perldoc CGI

Rheinwerk Computing - Zum Seitenanfang

30.1.3 JavaZur nächsten ÜberschriftZur vorigen Überschrift

Java ist wie C++ eine objektorientierte Programmiersprache. Entwickelt wurde die Programmiersprache von Sun Microsystems, die Entwicklung mit Java 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 kompiliert wird. Java-Code wird vom Java-Compiler (javac) in eine Bytecode-Datei übersetzt. Eine solche 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 Web- Applets 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.

[zB]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.

Listing 30.10 hello.java

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

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

Listing 30.11 hello.java wird übersetzt.

$ javac hello.java

Nun kann unser Programm durch java ausgeführt werden.

Listing 30.12 java arbeitet.

$ java hello
Hello World!

Rheinwerk Computing - Zum Seitenanfang

30.1.4 TclZur nächsten ÜberschriftZur vorigen Überschrift

Bei Tcl (Tool Command Language) handelt es sich um eine sehr schnell erlernbare Skriptsprache. Aufgrund der hohen Portabilität ist Tcl (wie 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. [Fn. 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, hieße der Interpreter tclsh8.4.

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.

Listing 30.13 tcl anwenden

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

wish

Möchte man nun grafische Oberflächen für seine Skripte erstellen, so funktioniert dies 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:

Listing 30.14 Buttons mit wish

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

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

Abbildung 30.1 Das obige Skript (ausgeführt)


Rheinwerk Computing - Zum Seitenanfang

30.1.5 Was es sonst noch gibtZur vorigen Überschrift

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 (zum Beispiel GNU Smalltalk)
  • Ruby (ähnlich wie Perl)
  • Erlang (eine funktionale Sprache von Ericsson – leider schlecht dokumentiert)
  • Python
  • Lua
  • Yorick (eine Sprache aus der Physik mit sehr einfacher Syntax)


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Linux Handbuch






 Linux Handbuch


Zum Rheinwerk-Shop: Linux Server






 Linux Server


Zum Rheinwerk-Shop: Raspberry Pi






 Raspberry Pi


Zum Rheinwerk-Shop: Ubuntu 14.04 LTS






 Ubuntu 14.04 LTS


Zum Rheinwerk-Shop: Roboter bauen mit Arduino






 Roboter bauen
 mit Arduino


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2012
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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern