Hochschule Fulda – FB ET Sommersemester 2010

Slides:



Advertisements
Ähnliche Präsentationen
Strukturen in C Spelz, Sievers, Bethke.
Advertisements

Hochschule Fulda – FB ET Sommersemester 2010
Ein- und Ausgabe von Dateien
Wiederholung Betriebssystem bietet eine Abstraktion der Hardware an:
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
ARRAY oder FELD oder VEKTOR
Konstruktoren.
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Hochschule Fulda – FB ET Sommersemester 2010
Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter.
Datenströme DVG Datenströme.
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
Programmieren in C Einführung
Programmierung 1. Einführung Seite 1
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Einführung
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Grundlagen C 5
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Überblick C "Was ist wichtig?"
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Einführung
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Annäherung an C
Programmieren in C Grundlagen C 3
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Dateien
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Hochschule Fulda – FB AI Sommersemester 2014
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Java-Kurs Übung Besprechung der Hausaufgabe
Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Dateien
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Programmieren in C Grundlagen C 1
Programmieren in C Module und Bibliotheken
 Präsentation transkript:

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 1 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ

Module 1 Um größere Programmprojekte überschaubar und sicherer zu machen, wird die Aufgabe in kleinere Teilaufgaben (= Module) zerlegt  Reduktion der Komplexität  separates Entwickeln und Testen  Wiederverwendbarkeit von Programmteilen  Erstellen von Programmbibliotheken Abstraktion von Daten und Funktionen Kapselung von Daten Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 2  Black Box Ein Modul in C ist eine Quelldatei, in der eine oder mehrere Funktionen zusammengefasst werden Interne Funktionen möglich, die nur innerhalb des Moduls sichtbar sind Interne Variable möglich, die nur innerhalb des Moduls zugreifbar sind  Definition als static Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 3 Projekt: Module und Bibliotheken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 4 Schnittstellen eines Moduls, Funktionen und ggfs. Variablen in Headerdatei beschrieben Getrennte Übersetzung der Quelldateien und Erzeugen von Objektkode Erstellen von Programmbibliotheken zur leichten Wiederverwendbarkeit Zusammenmontieren des ausführbaren Programms aus Objektkode der Quellen und der Module sowie aus Bibliotheken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 5 Beispiel: Zinsberechnung zinsen2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 6 Beispiel: Moduldatei zpower.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 7 Beispiel: Moduldatei zzins.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 8 Beispiel: Headerdatei zinsen.h Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 9 Beispiel: Hauptprogramm zinsen4.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 10 Steuerung der Compilierung bzw. der durchzuführenden Aktionen zur Erzeugung eines Programms oder Objekts durch sog. Makefiles Makefiles beschreiben die Abhängigkeit eines Objekts oder Programms von Quelldateien, Modulen und Bibliotheken beschreiben die notwendigen Aktionen, um Programme, Objektfiles usw. zu erstellen vordefinierte Aktionen, z.B. C  Objektfile Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 11 Aktionen abhängig von Zeitstempeln der Dateien Beispiel: prog.exe: main.o modul1.o modul2.o gcc -o prog.exe main.o \ modul1.o modul2.o -lm -lc Programm prog.exe abhängig von Objektfiles main.o, modul1.o und modul2.o Aktion: Binden der Objektfiles mit Libs libm und libc Automatisches Neucompilieren einer Quelle und Neubinden des Exe bei Änderung einer Quelldatei Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Module 12 Beispiel: Makefile für Zinsprogramme Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 1 in der Programmiersprache C sind nur die notwendigsten Grundfunktionalitäten definiert es fehlen z.B. Funktionen für Ein-/Ausgabe, Funktionen für Dateihandling, Funktionen für Stringhandling, höhere mathematische Funktionen und vieles andere mehr erleichtert die Entwicklung eines C-Compilers leichtere Anpassung / Übertragung auf andere Hardware oder Betriebssysteme Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 2 Sehr viele der in der Sprachdefinition nicht enthaltenen Funktionen werden in sog. Funktionsbibliotheken, wie z.B. der C-Standardbibliothek, mitgeliefert In der Standardbibliothek sind u.a. enthalten Ein- und Ausgabefunktionen, Dateihandling, Stringfunktionen u.v.m.  libc Mathematische Funktionen  libm und viele, viele weitere Funktionen Die C-Standardbibliothek ist „genormt“ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 3 Funktionen sind zu funktionalen Gruppen zusammengefasst  jeweils eine eigene Headerdatei In den Headerdateien sind Prototypen der Funktionen, Typen, Konstanten, Makros usw. definiert oder deklariert Beispiele: Ein- und Ausgabe  stdio.h Stringfunktionen  strings.h Mathematische Funktionen  math.h Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 4 Beispiel: stdio.h (Fragment) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 5 das Handling von Dateien/Files ist ein sehr gutes Beispiel für Modularisierung in C die Definition des Typs FILE ist in stdio.h „verborgen“ benötigt wird für Ein-/Ausgabe in C-Programmen nur der Typ FILE die Implementierung des Typs FILE ist für die Verwendung in Programmen unwichtig sie sollte auf gar keinen Fall in Programmen verwendet werden, da sie systemabhängig ist! alle benötigten Konstanten und EA-Funktionen sind in stdio.h definiert bzw. deklariert Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 6 Bsp: älteres UNIX typedef struct { int _cnt; unsigned char *_ptr; unsigned char *_base; unsigned char _flag; unsigned char _file; } FILE; extern FILE _iob[]; Bsp: devcpp typedef struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; } FILE; extern FILE *_imp___iob)[]; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Bibliotheken 7 FILE  abstrakter Datentyp für Datei-EA Typ FILE muss (!) unabhängig von der realen Implementierung genutzt werden, da diese systemabhängig (Betriebssystem, Compiler) ist Konstanten teilweise auch systemabhängig Bsp: devcpp  _imp___iob #define _iob (*_imp___iob) #define stdin (&_iob[STDIN_FILENO]) #define stdout (&_iob[STDOUT_FILENO]) #define stderr (&_iob[STDERR_FILENO] Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 1 Grundlegender Datentyp FILE zugrundeliegendes Modell: stream Daten- oder Bytestrom: Bytes werden sequentiell gepuffert gelesen / geschrieben Bsp: printf("HALLO, WELT"); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 2 Files  Dateien, Pipes, Geräte usw. Bildschirm / Tastatur stdin, stdout, stderr Pipes (anonyme Pipes, FIFOs) Sockets (Netzwerkverbindungen) Drucker Tapes, Festplatte, USB-Stick usw. Effizient für „normale“, sequentielle Files Uneffizient z.B. für Datenbanken Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 3 FILE *fopen(char *pn, char *mode) öffnet Datei mit dem Pfadname pn und verbindet einen stream mit der Datei liefert einen Zeiger vom Typ FILE * auf den geöffneten stream mode gibt den Modus an: r, rb read - lesen, Datei muss existieren w, wb write - schreiben, Datei wird erzeugt, Dateilänge auf 0 gesetzt a, ab append - schreiben, anhängen r+, rb+ update - lesen+schreiben Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 4 fopen() liefert NULL bei Fehler, Bsp: void perror(char *msg) FILE *fp; fp = fopen("datei", "r"); if(fp == NULL) { perror("datei"); return(1); } void perror(char *msg) Gibt Systemfehlermeldung auf stderr aus int fclose(FILE *fp) schließt Verbindung zum stream fp Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 5 int fprintf(FILE *fp, char *fmt, /* args */ ...) formatiertes Schreiben auf stream fp liefert die Anzahl geschriebener Bytes printf()  fprintf(stdout, ...) int fscanf(FILE *fp, char *fmt, /* args */ ...) formatiertes Lesen von stream fp liefert Anzahl gelesener Elemente scanf()  fscanf(stdin, ...) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 6 Zeichen-/Wort-Eingabefunktionen int fgetc(FILE *fp) int getc(FILE *fp) Zeichen von stream fp lesen liefert gelesenes Zeichen, EOF bei Dateiende getchar() fgetc(stdin) oft als Makro implementiert int fgetw(FILE *fp) Wort (Integer) von stream fp lesen liefert gelesenen Integerwert, EOF bei Dateiende Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 7 String-Eingabefunktionen char *fgets(char *s, int n, FILE *fp) Zeile von fp in Puffer s lesen, maximal n Bytes liefert NULL bei Dateiende char *gets(char *s) Zeile von stdin in Puffer s einlesen NULL bei EOF Achtung: Keine Prüfung der Puffergröße Sicherer  fgets() statt gets() verwenden Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 8 Zeichen-/Wort-Ausgabefunktionen int fputc(int c, FILE *fp) int putc(int c, FILE *fp) Zeichen c auf stream fp ausgeben liefert geschriebenes Zeichen, EOF bei Fehler putchar(c)  fputc(c, stdout) oft als Makro implementiert int putw(int w, FILE *fp) Wort w (Integer) auf stream fp ausgeben liefert geschriebenes Wort, EOF bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 9 String-Ausgabefunktionen int fputs(char *s, FILE *fp) String s auf stream fp ausgeben, EOF bei Fehler int puts(char *s) String s auf stdout ausgeben, EOF bei Fehler Ausgabepuffer leeren int fflush(FILE *fp) schreibt Ausgabepuffer des stream fp liefert 0 bei Erfolg, -1 bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 10 Beispiel: filecopy.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 11 Beispiel: numcat.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 12 Beispiel: revcat.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 13 binäre Ein- und Ausgabefunktionen size_t fread(void *p, size_t s, size_t n, FILE *fp) size_t fwrite(void *p, size_t s, size_t n, FILE *fp) Lesen/Schreiben von n Objekten der Größe s aus/in den Puffer p von/auf den stream fp liefert die Anzahl gelesener/geschriebener Objekte n bzw. -1 bei Fehler Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 14 Positionierung in Dateien / streams int fseek(FILE *fp, long o, int w) Setzt den Positionszeiger innerhalb des streams fp auf die neue Position w+o o (offset) gibt den Offset zu w an w (whence) gibt die Ausgangsposition an SEEK_SET Dateianfang + Offset o SEEK_CUR aktuelle Position + Offset o SEEK_END Dateiende + Offset o liefert 0 bei Erfolg, -1 im Fehlerfall Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 15 long ftell(FILE *fp) void rewind(FILE *fp) gibt den aktuellen Wert des Positionszeigers innerhalb der Datei fp aus liefert aktuelle Position vom Dateianfang an gesehen, im Fehlerfall -1 void rewind(FILE *fp) Positionszeiger der Datei fp auf Dateianfang rewind(fp) fseek(fp, 0, SEEK_SET) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 16 Weitere Funktionen int rename(char *old, char *new) Umbennenung von Datei old in new int remove(char *path) Löschen von Datei path Funktionen liefern 0 oder bei -1 bei Fehler int system(char *command) Ausführen des Strings command liefert -1 bei Fehler, 0, wenn Kommando ok Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 17 Fehlerbehandlung int ferror(FILE *fp) int feof(FILE *fp) liefert Wert != 0 bei Fehler in fp, sonst 0 int feof(FILE *fp) liefert Wert != 0 bei EOF in fp, sonst 0 int clearerr(FILE *fp) Setzt Fehler- und EOF-Indikator in fp zurück void perror(char *s) gibt Systemfehlermeldung auf stderr aus Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 18 low-level Systemcalls alle bisher bekannten Funktionen für Eingabe und Ausgabe auf streams / Dateien: arbeiten aus Effizienzgründen gepuffert nutzen für die tatsächlichen Eingabe- und Ausgabeoperationen low-level-Funktionen des Betriebssystems  Systemaufrufe oder Systemcalls teilweise nach Posix genormt Unix / Linux ca. 300, Windows Vista geschätzt 360 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 19 Bsp: Schichten im Betriebsystem Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 20 Low-level IO-Funktionen int open(char *path, int flag) int creat(char *path, mode_t mode) öffnen / erzeugen Datei mit Namen path liefern Filedescriptor (Integer), -1 bei Fehler int close(int fd) Schliessen der Datei mit Filedescriptor fd ssize_t read(int fd, void *b, size_t n) ssize_t write(int fd, void *b, size_t n) Lesen/Schreiben von n Bytes aus Puffer b auf fd Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 21 Standardfiledeskriptoren FILE *fdopen(int fd, char *mode) 0 Standardeingabe  stdin 1 Standardausgabe  stdout 2 Standardfehlerausgabe  stderr FILE *fdopen(int fd, char *mode) verbindet einen stream mit einem Filedeskriptor int fileno(FILE *fp) liefert Filedeskriptor zum stream fp Filedeskriptor ist Teil des FILE-Datentyps Zugriff durch Funktion fileno() gekapselt Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 22 Diskussion Warum Pufferung von IO? Warum Schichtung Anwendungs-/Systemebene? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 23 Beispiel: bytecopy1.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 24 Beispiel: bytecopy2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 25 Beispiel: bytecopy3.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Dateien 26 Diskussion Welches bytecopy ist schneller und effizienter? Warum? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ