Übungen zu Systemprogrammierung 1 (SP1)
|
|
|
- Klaudia Keller
- vor 9 Jahren
- Abrufe
Transkript
1 Übungen zu Systemprogrammierung 1 (SP1) VL 3 Sortieren und Tooling Jens Schedel, Christoph Erhardt, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2012/ November bis 09. November c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 2 SVN-Apell Abgabesystem: Team-Arbeit Macht euch frühzeitig mit dem Bearbeitungs-/Abgabeprozess vertraut Arbeiten von Beginn an in Projektverzeichnis Zwischenstände einchecken Zu Beginn testweise leere Dateien einchecken und abgeben selbstverschuldet verspätete Abgaben werden nicht angenommen! Gemeinsame Bearbeitung im Repository eines Teammitglieds Repository-Eigentümer: alice Partner (nutzt Repository von alice): bob Abgabe erfolgt ebenfalls im Repository des Eigentümers es ist nur eine Abgabe erforderlich Hinweis: Bei Verständnis-Problemen zu Subversion empfiehlt sich die Lektüre zumindest der ersten beiden Kapitel des SVN-Buches c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 3 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 4
2 Ablauf für den Repository-Eigentümer Ablauf für den Partner /proj/i4sp1/bin/import-from-partner aufgabe1 alice technisch: svn:externals-property Partner wird für jede Team-Aufgabe separat festgelegt > /proj/i4sp1/bin/set-partner aufgabe2 bob irrelevant für Abgabe, unterstützt nur den Prozess der Teamarbeit Partner setzt in seinem Repository einen Verweis auf Hauptrepository Achtung: Abgabe im eigenen Repository überlagert Partnerabgabe > /proj/i4sp1/bin/import-from-partner aufgabe2 alice zum Umstieg auf Teamarbeit eigene Abgabe löschen (Übungsleiter hilft) Hintergrund Erzeugung und Commit einer Textdatei partner in trunk/aufgabe2 diese Datei enthält den Login-Namen (bob) des Partners für diese Aufgabe Partner erhält Zugruff auf die relevanten Teile des Repositorys trunk/aufgabe2 branches/aufgabe2 Abgabe funktioniert wie gewohnt > /proj/i4sp1/bin/submit aufgabe2 SP - Ü aufgabe0 trunk aufgabe1 /proj/i4sp1/bob branches aufgabe0 aufgabe1 Repository bob Repository alice Nach Ausführung des Skriptes svn update ausführen Achtung: Abgabe im eigenen Repository überlagert Partnerabgabe Systemprogrammierung 1 Übungen Michael zum Stilkerich Umstieg Universität Erlangen-Nürnberg auf Teamarbeit U2.12 Informatik 4, 2012 eigene Abgabe löschen (Übungsleiter U02.fm hilft) Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 5 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 6 Ablauf für den Partner Arbeit in der eigenen Arbeitskopie fest normal möglich Der Befehl svn commit übermittelt nur Änderungen an das Repository das für den aktuellen Pfad zuständig ist > svn status X aufgabe2 M aufgabe2/wsort.c > svn commit # Es erfolgt kein Commit > svn status X aufgabe2 M aufgabe2/wsort.c > cd aufgabe2 > svn commit -m bla Committed revision 5. Abgabe funktioniert wie gewohnt > /proj/i4sp1/bin/submit aufgabe2 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 7 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 8
3 Fehlerbehandlung Fehlerbehandlung: Beendigung des Programms Fehler können aus unterschiedlichsten Gründen im Programm auftreten Systemressourcen erschöpft: malloc(3) schlägt fehl Fehlerhafte Benutzereingaben: fopen(3) schlägt fehl Transiente Fehler: z.b. nicht erreichbarer Server... Gute Software erkennt Fehler, führt eine angebrachte Behandlung durch und gibt eine aussagekräftige Fehlermeldung aus Kann das Programm trotz des Fehlers sinnvoll weiterlaufen? Beispiel 1: Benutzer gibt ungültige URL in den Browser ein Fehlerbehandlung: Fehlermeldung anzeigen, Programm läuft weiter Beispiel 2: Kopierprogramm: Öffnen der Quelldatei schlägt fehl Fehlerbehandlung: Fehlermeldung anzeigen, Kopieren nicht möglich, Programm beenden Tritt ein Fehler auf, der ein sinnvolles Weiterarbeiten verhindert, muss das Programm beendet werden (exit(2)) und einen Programmabbruch anzeigen. Signalisierung des Fehlers an Aufrufer des Programms über den Exitstatus Exitstatus 0 zeigt erfolgreiche Programmausführung an Werte ungleich 0 zeigen einen Fehler bei der Ausführung an Die Bedeutung des entsprechenden Wertes ist nicht standardisiert Manchmal enthält die Manpage Informationen über die Bedeutung des Exitstatus libc bietet vordefinierte Makros für den Exitstatus an: EXIT_SUCCESS EXIT_FAILURE Exitstatus des letzten Befehls ist in der Shell-Variable $? gespeichert c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 9 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 10 Erkennung und Ausgabe von Fehlern Fehler treten häufig in Funktionen der C-Bibliothek auf erkennbar i.d.r. am Rückgabewert (Manpage, RETURN VALUES) Die Fehlerursache wird über die globale Variable errno übermittelt Der Wert errno=0 ist reserviert, alles andere ist ein Fehlercode Bibliotheksfunktionen setzen errno im Fehlerfall (sonst nicht zwingend) Bekanntmachung im Programm durch Einbinden von errno.h Fehlercodes als lesbare Strings ausgegeben mit perror(3) char *mem = malloc(...); if(null == mem) { perror("malloc"); exit(exit_failure); } // malloc gibt im Fehlerfall // NULL zurück // Ausgabe der Fehlerursache // Programm mit Fehlercode beenden perror(3) nur verwenden, wenn die errno gesetzt wurde sonst mit Hilfe von fprintf(3) eigene Fehlermeldung ausgeben c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 11 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 12
4 Dynamische Speicherverwaltung Teil 2 Verändern der Größe von Feldern, die durch malloc(3) bzw. calloc(3) erzeugt wurden: int* numbers = malloc( n*sizeof(int) ); if ( numbers == NULL ) {... }... // Speicherbedarf gestiegen int* neu = realloc( numbers, (n+10) * sizeof(int)); if(neu == NULL) {... free(numbers);...} numbers = neu; Neuer Speicherbereich enthält die Daten des ursprünglichen Speicherbereichs (wird automatisch kopiert; aufwändig) Sollte realloc(3) fehlschlagen, wird der ursprüngliche Speicherbereich nicht freigegeben Explizite Freigabe mit free(3) notwendig. c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 13 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 14 Generisches Sortieren mit qsort Arbeitsweise von qsort 1 Arbeitsweise von qsort(3) U3-4 Generisches Sortieren mit qsort Vergleich nahezu beliebiger Daten alle Daten müssen die gleiche Größe haben qsort weiß nicht, was es sortiert (wie der Vergleich zu bewerkstelligen ist) Aufrufer stellt Routine zum Vergleich zweier Elemente zur Verfügung Prototyp aus stdlib.h: void qsort(void *base, size_t nel, size_t width, int (*compare) (const void *, const void *)); base: Zeiger auf das erste Element des zu sortierenden Feldes nel: Anzahl der Elemente im zu sortierenden Feld width: Größe eines Elements compare: Vergleichsfunktion qsort vergleicht je zwei Elemente mit Hilfe der Vergleichsfunktion SP - Ü qsort vergleicht je zwei Elemente mit Hilfe der Vergleichsfunktion sind die beiden Elemente falsch angeordnet, werden diese getauscht base nel= compare(4,3)-> width=sizeof(int) Die Funktion vergleicht die beiden Elemente und liefert: Die Funktion vergleicht die beiden Elemente und liefert: < 0, falls Element 1 kleiner gewertet wird als Element 2(1, 5 : -4) < 0 falls Element 1 kleiner gewertet wird als Element 2 0, falls Element 1 und Element 2 gleich gewertet werden (5, 5 : 0) 0 falls Element 1 und Element 2 gleich gewertet werden > 0, falls Element 1 größer gewertet wird als Element 2(9, 1 : 8) > 0 falls Element 1 größer gewertet wird als Element 2 Systemprogrammierung 1 Übungen Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2012 U03.fm U3.12 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. 6 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 15 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 16
5 Vergleichsfunktion Die Vergleichsfunktion erhält Zeiger auf Feldelemente Beispiel: Vergleichsfunktion für int int intcompare(const int *, const int *); const-zusicherung: Funktion ändert die verglichenen Werte nicht qsort(3) kennt den tatsächlichen Datentyp nicht Prototyp ist generisch mit void-zeigern parametriert void qsort(...,int (*compare) (const void *, const void *)); Cast erforderlich entweder innerhalb einer Funktion wrapintcompare() oder bei der Übergabe des Funktionszeigers an qsort(3) (schöner!) c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 17 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 18 valgrind valgrind Baukasten von Debugging- und Profiling-Werkzeugen Zugriffe auf nicht allokierten Speicher finden Für uns relevant: memcheck Erkennt Speicherzugriff-Probleme: Nutzung von nicht-initialisiertem Speicher Zugriff auf freigegeben Speicher Zugriff über das Ende von allokierten Speicherbereichen =711= Invalid read of size 4 =711= at 0x804841B: main (test.c:19) =711= Address 0x0 is not stack d, malloc d or (recently) free d =711= =711= Process terminating with default action of signal 11 (SIGSEGV) =711= Access not within mapped region at address 0x0 In Zeile 19 wird lesend auf die Adresse 0x0 zugegriffen Der Prozess wird auf Grund einer Speicherzugriffsverletzung (SIGSEGV) beendet =787= Invalid write of size 1 =787= =787= at 0x48DC9EC: memcpy (mc_replace_strmem.c:497) by 0x80485A2: test_malloc (test.c:57) =787= by 0x80484A8: main (test.c:22) =787= Address 0x6d1f02d is 0 bytes after a block of size 5 alloc d In Zeile 57 wird memcpy aufgerufen, welches ein Byte an eine ungültige Adresse schreibt c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 19 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 20
6 valgrind valgrind Auffinden von nicht freigegebenem Speicher Auffinden uninitialisierten Speichers =787= HEAP SUMMARY: =787= in use at exit: 5 bytes in 1 blocks =787= total heap usage: 1 allocs, 0 frees, 5 bytes allocated Bei Programmende sind noch ein Speicherbereich (Blöcke) belegt Während der Programmausführung wurde einmal malloc() und kein mal free() aufgerufen Mit Hilfe der Option -leak-check=full -show-reachable=yes wird angezeigt, wo der Speicher angelegt wurde, der nicht freigegeben wurde. =799= Use of uninitialised value of size 4 =799= at 0x : _itoa_word (_itoa.c:195) =799= by 0x4967C59: vfprintf (vfprintf.c:1616) =799= by 0x496F3DF: printf (printf.c:35) =799= by 0x : test_int (test.c:48) =799= by 0x : main (test.c:15) In Zeile 48 wird auf uninitialisierten Speicher zugegriffen Mit Hilfe der Option -track-origins=yes wird angezeigt, wo der uninitialisierte Speicher angelegt wurde =799= 5 bytes in 1 blocks are definitely lost in loss record 1 =799= =799= at 0x48DAF50: malloc (vg_replace_malloc.c:236) by 0x : test_malloc (test.c:52) =799= by 0x80484A8: main (test.c:22) In Zeile 52 wurde der Speicher angefordert Im Quellcode stellen identifizieren, an denen free()-aufrufe fehlen =683= Use of uninitialised value of size 4 =683= at 0x : _itoa_word (_itoa.c:195) =683= by 0x4967C59: vfprintf (vfprintf.c:1616) =683= by 0x496F3DF: printf (printf.c:35) =683= by 0x : test_int (test.c:48) =683= by 0x : main (test.c:15) =683= Uninitialised value was created by a stack allocation =683= at 0x804846A: main (test.c:10) c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 21 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 22 valgrind Spezialfall: Zugriff auf uninitialisierten Speicher bei Bedingungsprüfungen =683= Conditional jump or move depends on uninitialised value(s) =683= at 0x48DC0E7: GI_strlen (mc_replace_strmem.c:284) =683= by 0x496886E: vfprintf (vfprintf.c:1617) =683= by 0x496F3DF: printf (printf.c:35) =683= by 0x : test_int (test.c:48) =683= by 0x : main (test.c:15) c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 23 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 24
7 Make U3-5 Make Teil 1 Grundsätzlich: Grundsätzlich: Erzeugung Erzeugung von Dateien von Dateien aus anderen aus anderen Dateien Dateien für uns interessant: Erzeugung einer.o-datei aus einer.c-datei SP - Ü für uns interessant: Erzeugung einer.o-datei aus einer.c-datei test.c test.h gcc -c -o test.o test.c test.o Ausführung Ausführung von Update-Operationen von (auf (auf Basis Basis der der Modifikationszeit) Modifikationszeit) Systemprogrammierung 1 Übungen c js, Michael ce, jk Stilkerich SP1 Universität (VL 2 Erlangen-Nürnberg WS 2012/13) Informatik 3 4, Sortieren 2012 und Tooling U03.fm Makros U3-5 Make U3.15 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. SP - Ü Regeldatei mit dem Namen Makefile Funktionsweise Targets (was wird erzeugt?, hier: test.o) Abhängigkeiten (woraus?, hier: test.c, test.h) Regeldatei Befehlszeilen mit dem(wie?, Namen hier: Makefile entsprechendes GCC-Kommando) Tabulator Target Befehlszeilen test.o: test.c test.h gcc -c -o test.o test.c Abhängigkeiten (Dependencies) jede Zeile wird in einer neuen Shell ausgeführt Target (was wird erzeugt?) cd in einer Zeile hat keine Auswirkung auf die nächste Zeile erzeugt gleichnamige Datei Abhänigigkeiten das zu erstellende (woraus?) Target kann beim make-aufruf angegeben werden kann (z.b. auch make eintest.o) Target sein Befehlszeilen ohne explizite (wie?) Target-Angabe bearbeitet make das erste Target im Makefile Dieses ist normalerweise das Target all zu erstellendes Target bei make-aufruf angeben: make test.o ohne Target-Abgabe bearbeitet make das erste Target im Makefile Systemprogrammierung 1 Übungen Michael Stilkerich Universität Erlangen-Nürnberg Informatik 4, 2012 U03.fm U3.16 Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors. c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 26 In einem Makefile können Makros definiert werden SOURCE = test.c func.c Verwendung der Makros mit $(NAME) oder ${NAME} test: $(SOURCE) gcc -o test $(SOURCE) Erzeugung neuer Makros durch Konkatenation ALLOBJS = $(OBJS) hallo.o Gängige Makros: CC C-Compiler-Befehl CFLAGS Optionen für den C-Compiler c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 27 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 28
8 Aufgabe 2: wsort Lernziele Gemeinsames Arbeiten mit SVN Einlesen von der Standardeingabe (stdin) Umgang mit dynamischer Speicherverwaltung (realloc(3)) Verwendung von Debug-Werkzeugen Ausprobieren eures Programmes Beispiel-Eingabedateien in /proj/i4sp1/pub/aufgabe2 Vergleichen der Ausgabe mit vorgegebenem Binary ( Gelerntes Anwenden) c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 29 c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 30 Aktive Mitarbeit! Aufgabenstellung Makefile zum Testen der Aufgabe 2 (wsort) isort Programm, welches als Argumente übergebene Zahlen sortiert c js, ce, jk SP1 (VL 2 WS 2012/13) 3 Sortieren und Tooling 3 31
Übungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) B1 Debugging Jens Schedel, Christoph Erhardt, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme 03-B1_handout Friedrich-Alexander-Universität
U3 3. Übung U3-1 Fehlerbehandlung U3 3. Übung U3-1 Fehlerbehandlung malloc(3) open(2) qsort(3) erkennt Fehler angebrachte Behandlung
U3 3. Übung U3 3. Übung Vorstellen der Aufgabe 1: lilo Fehlerbehandlung Dynamische Speicherverwaltung Debugging mit GDB Generisches Sortieren mit qsort(3) Übersetzen von Projekten mit Hilfe von make(1)
U1 3. Übung U1 3. Übung. Die Kommandos auf den folgenden Folien dienen der Veranschaulichung. Sind nicht direkt auf die Übungsaufgabe übertragbar
U1 3. Übung U1 3. Übung Besprechung Aufgabe 0 Make und Makefiles Aufgabe 2 U1-1 Hinweise Die Kommandos auf den folgenden Folien dienen der Veranschaulichung Sind nicht direkt auf die Übungsaufgabe übertragbar
Übungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü1-2 Speicherverwaltung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
Lehrstuhl für Datenverarbeitung. Technische Universität München. Grundkurs C++ Debugging
Grundkurs C++ Debugging Berühmte Software-Bugs 1947: Fehlfunktion des Mark II Relay Calculator aufgrund einer Motte. Grundkurs C++ 6 Berühmte Software-Fehler 1996: Ariane 5 muss 40 Sekunden nach dem Start
Tools zur Programmierung mit C Software Entwicklung 1
Tools zur Programmierung mit C Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller Inhaltsverzeichnis 1 Compiler 1 1.1 Installation.................................. 2 1.1.1 Installation
C/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
Linux. Fehlerbehandlung Sebastian Maier. Aufgabe: concat Übung 7 Anhang
Übungen zu Systemnahe Programmierung in C (SPiC) Sebastian Maier (Lehrstuhl Informatik 4) Übung 7 Sommersemester 2016 Lehrstuhl Informatik 4 Übungen zu SPiC (SS 2016) 2 23 Terminal - historisches (etwas
Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk [email protected] http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.
Betriebssysteme Tafelübung 4. Speicherverwaltung http://ess.cs.tu-dortmund.de/de/teaching/ss217/bs/ Olaf Spinczyk [email protected] http://ess.cs.tu-dortmund.de/~os AG Eingebettete Systemsoftware
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
Dynamische Speicherverwaltung
Dynamische Speicherverwaltung 1/ 23 Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Dynamische Speicherverwaltung 2/ 23 Gliederung 1 Allgemeines zur Speichernutzung 2 Ziele und Nutzen 3 Anwendung in
Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()
Übungspaket 29 Dynamische Speicherverwaltung malloc() und free() Übungsziele Skript In diesem Übungspaket üben wir das dynamische Alloziieren 1. und Freigeben von Speicherbereichen 2. von Zeichenketten
Speicherverwaltung in C
Speicherverwaltung in C Tobias Gutzmann, Le Xuan Khanh, Robert Hartmann 19.04.2005 Typeset by FoilTEX Inhalt Übersicht der wichtigsten Befehle malloc, free, realloc alloca, obstack, brk Speicherverwaltung
F Zeiger, Felder und Strukturen in C
F Zeiger, Felder und Strukturen in C F Zeiger, Felder und Strukturen in C F.1 Zeiger(-Variablen) 1 Einordnung Konstante: Bezeichnung für einen Wert a 0110 0001 Variable: Bezeichnung eines Datenobjekts
Advanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
Dynamischer Speicher
Dynamischer Speicher C-Kurs 2012, 3. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 13. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Übungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü1 Einführung Christian Eichler, Andreas Ziegler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität
Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes
Variablen Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes v ist Stück im Speicher, der 4 Bytes lang ist Speicherzugriff? Über Adressen!
Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C
Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code
Vorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
Dynamische Speicherverwaltung
Dynamische Speicherverwaltung Tim Dobert 17.05.2013 Inhaltsverzeichnis 1 Allgemeines zur Speichernutzung 2 2 Ziel und Nutzen 2 3 Anwendung in C 2 3.1 malloc............................... 3 3.2 calloc...............................
Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien
Informatik I SS 2003 Dateioperationen 1 Textdateien, Öffnen Abspeichern und Einlesen von Texten (Strings) in Dateien 1. Das Öffnen einer Datei a) Deklaration eines Zeigers auf eine Datei FILE *pfile; b)
U4-1 Aufgabe 3: einfache malloc-implementierung
U4 3. Übung U4 3. Übung Besprechung der Aufgabe 2: wsort Aufgabe 3: malloc-implementierung Ziele der Aufgabe Zusammenhang zwischen "nacktem Speicher" und typisierten bereichen verstehen Funktion aus der
U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm
U3 3. Übung U3 3. Übung Besprechung Aufgabe 1 Pointer Register und Ports U3.1 U3-1 Zeiger U3-1 Zeiger 1 Einordnung Konstante: a 0110 0001 Variable: a Zeiger-Variable (Pointer): a char *p = &a; p U3.2 2
Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)
Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/
Dynamisches Speichermanagement
Dynamisches Speichermanagement Proseminar C-Programmierung - Grundlagen und Konzepte Timo Minartz [email protected] Wissenschaftliches Rechnen Fachbereich Informatik Universität Hamburg
Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen
Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen
C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
Einführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.
Dateioperationen Seite 1 von 12 Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung. z.b.: c:\testdateien\text.dat //Datendatei
Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C
Übersicht Funktionen Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion Sinn von Funktionen Wiederverwendung häufig verwendeter nicht banaler Programmteile Wiederverwendung
Einführung in die Programmiersprache C
Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:
Zusammengehörige Daten struct. Strukturierte Datentypen und Funktionszeiger. Zugriff auf struct-elemente. Variablendeklarationen mit struct
Zusammengehörige Daten Anstatt logisch zusammengehörende Daten in mehreren unabhängigen Variablen zu speichern, kann man für sie einen eigenen Datentyp ( Verbund, Record ) definieren, der diesen Zusammenhang
6 Speicherorganisation
Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen Speicherbereich für
6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
Präprozessor und make. einfache Makros Makros nehmen eine Textersetzung vor. Erst nach der Ersetzung muss gültiger C-Code vorliegen.
Bevor der eigentliche Kompilier-Vorgang stattfindet, wird vom sogenannten eine Vorverarbeitung durchgeführt. Hierbei werden zum Beispiel Kommentare entfernt, aber auch explizite Anweisungen an den verarbeitet.
Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher
Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher Arvid Terzibaschian 1 Zusammengesetzte Datentypen 2 Wozu zusammengesetzte Datentypen? Anforderung: Sie sollen ein Kundenverzeichnis
2. Prozesssynchronisation
Tafelübung zu BSRvS1 2. Prozesssynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/
Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff
Programmieren in C Speicher anfordern, Unions und Bitfelder Prof. Dr. Nikolaus Wulff Vergleich: Felder und Strukturen Felder müssen Elemente vom selben Typ enthalten. Strukturen können Elemente unterschiedlichen
FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl
PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen
Pointer. Variablen. Pointer. Ein elementares Beispiel. Pointer in C
Variablen Pointer Variable vs. Pointer Dereferenzieren Address-of Operator & Dereference Operarot * Call by Reference Variable = symbolischer Name für Speicherbereich + Information, wie Speicherbereich
Crashkurs C++ - Teil 1
Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik
Kurzeinführung in C99
Kurzeinführung in C99 Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Compiler und Editoren - Was wird benötigt um ein Programm zu erstellen 2
Dr. Monika Meiler. Inhalt
Inhalt 11 Dynamische Feldvereinbarung... 11-2 11.1 Dynamische Vereinbarung von Vektoren... 11-3 11.2 Dynamische Vereinbarung von Matrizen... 11-5 11.3 Die Kommandozeile... 11-8 Propädeutikum 11-1/8 11
Zeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
Grundlagen der Informatik Vorlesungsskript
Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1
Speicher und Adressraum
Linearer Speicher (Adressraum) Technische Universität München Speicher und Adressraum Freie Speicherhalde (Heap) Freier Speicherstapel (Stack) Globale Variablen Bibliotheksfunktionen Laufzeitsystem Programmcode
Versionskontrolle mit Subversion
Versionskontrolle mit Subversion Was ist Versionskontrolle? Ermöglicht gemeinsames Editieren von Quelltext und anderen Dateien Meist zentrale Ablage (Repository), Zugriff über Netzwerk Bearbeitung immer
einlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
Übungen zu Systemprogrammierung 1 (SP1)
Übungen zu Systemprogrammierung 1 (SP1) Ü1 Einführung J. Schedel, C. Erhardt, A. Ziegler, J. Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg
Strukturierte Datentypen und Funktionszeiger
Zusammengehörige Daten Anstatt logisch zusammengehörende Daten in mehreren unabhängigen Variablen zu speichern, kann man für sie einen eigenen Datentyp ( Verbund, Record ) definieren, der diesen Zusammenhang
Einstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung
Typ : void* aktuelle Parameter Pointer von beliebigem Typ
2. Funktionen - Prototypvereinbarung typangabe funktionsname(parameterliste); - Funktionsdefinition typ funktionsname(parameterliste){ Anweisung - Funktionstyp -> Typ der Funktionswertes zulaessige Typangaben
Felder, Zeiger und Adreßrechnung
Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche
Arrays (Felder/Vektoren)
Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff
4. Speicherverwaltung
Tafelübung zu BSRvS1 4. Speicherverwaltung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/exercises/
Teil I Debuggen mit gdb
Teil I Debuggen mit gdb Wer kennt das nicht? $./a.out Segmentation fault Was tun dagegen? printf()s in den Code einfügen? Besser (und professioneller): Einen Debugger verwenden Wer kennt das nicht? $./a.out
Tafelübung zu BS 4. Speicherverwaltung
Tafelübung zu BS 4. Speicherverwaltung Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/~os/ http://ess.cs.tu-dortmund.de/de/teaching/ss2014/bs/
182. stdio. 183. stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>
182. stdio Eingabe int getchar (), getc (FILE * fp), fgetc (FILE * fp); char * gets (char * buf), * fgets (char * buf, int len, FILE * fp); int scanf (const char * fmt,...); int fscanf (FILE * fp, const
Dateizugriff unter C
Begriffe Dateizugriff unter C Datei = sequentielle Ansammlung von Datenbytes, z.b. auf einer Festplatte Auch Bildschirm und Tastatur werden wie Dateien behandelt: Bildschirm ist die Datei stdout Tastatur
Kapitel 6: Dynamische Speicherverwaltung
Kapitel 6: Dynamische Speicherverwaltung Dieses Kapitel beschreibt die Operatoren new und delete, mit denen dynamisch Speicher reserviert und freigegeben wird. Außerdem wird im Detail eingegangen auf:
Linux Prinzipien und Programmierung
Linux Prinzipien und Programmierung Dr. Klaus Höppner Hochschule Darmstadt Sommersemester 2014 1 / 25 2 / 25 Pipes Die Bash kennt drei Standard-Dateideskriptoren: Standard In (stdin) Standard-Eingabe,
Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm
Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i
Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6
Andre Droschinsky Ingo Schulz Dortmund, den 0. Dezember 2015 Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6 Block rot Es können 4 + 1 Punkte erreicht werden. Abgabedatum: 10. Dezember 2015 2:59 Uhr Hinweise
Programmierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT
User Requirements GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT Softwareentwicklung Praktikum, Übungsbeispiel 1 Gruppe 18 Andreas Hechenblaickner [0430217] Daniela Kejzar [0310129] Andreas Maller [0431289]
Subversion. Einstieg in die. Versionskontrolle
Versionskontrolle mit Subversion Einstieg in die Versionskontrolle Dipl.Ing.(FH) K. H. Marbaise Agenda Wozu Versionskontrolle? Was leistet Versionskontrolle? Historie zu Subversion Projekt Handling Installation
Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010
Ein- und Ausgabe C - Kurs 2010 Mario Bodemann 15. September 2010 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License 1 / 46 Inhaltsverzeichnis 1 Wiederholung
7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});
S. d. I.: Programieren in C Folie 7-1 7 Funktionen 7.1 Definition Prototyp-Syntax: Speicherklasse Typ Name (formale Parameter); der Funktions-Prototyp deklariert eine Funktion, d.h. er enthält noch nicht
9 Zeiger (Pointer). Dynamischer Speicher
9 Zeiger (Pointer). Dynamischer Speicher Jörn Loviscach Versionsstand: 25. September 2013, 18:07 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen beim Ansehen der Videos: http://www.j3l7h.de/videos.html
Einführung in die Programmiersprache C
Einführung in die Programmiersprache C 10 Sicheres Programmieren Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur Klein, Buffer Overflows und Format-String-Schwachstellen.
Felder (Arrays) und Zeiger (Pointers) - Teil I
Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation n Wir können jetzt über Zahlen
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?
C- Kurs 08 Dipl.- Inf. Jörn Hoffmann jhoffmann@informa?k.uni- leipzig.de Universität Leipzig Ins?tut für Informa?k Technische Informa?k Überblick Datentyp zur Verwaltung von Adressen (auf Speicherplätze)
