1 / 46

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 1

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.

colton
Download Presentation

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatik IIGrundlagen der ProgrammierungProgrammieren in CModule und Bibliotheken 1 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ

  2. 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

  3. 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

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

  5. 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

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

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

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

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

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

  11. 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

  12. 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

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

  14. 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

  15. 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

  16. 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

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

  18. 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

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

  20. 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

  21. 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

  22. 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

  23. 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 existierenw, wb write - schreiben, Datei wird erzeugt, Dateilänge auf 0 gesetzta, ab append - schreiben, anhängenr+, rb+ update - lesen+schreiben Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

  24. Dateien 4 • fopen() liefert NULL bei Fehler, Bsp: 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

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

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

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

  33. 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

  34. 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

  35. Dateien 15 • long ftell(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

  36. 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

  37. Dateien 17 • Fehlerbehandlung • int ferror(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

  38. 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

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

  40. 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

  41. Dateien 21 • Standardfiledeskriptoren • 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

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

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

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

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

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

More Related