Programmieren in C. Die C-Standardbibliothek: Datei Ein- und Ausgabe. Prof. Dr. Nikolaus Wulff

Ähnliche Dokumente
Informatik I Programmieren in C

182. stdio stdio. Eingabe. Ausgabe. Typisch für Zeileneingabe und Analyse: #include <stdio.h>

E-/A-Funktionalität nicht Teil der Programmiersprache

Dateizugriff unter C

Dateioperationen Fachhochschule Würzburg-Schweinfurt Prof. Dr. Martin Ochs. Abspeichern und Einlesen von Texten (Strings) in Dateien

Programmiersprachen Einführung in C

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

file:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoii...

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

Übersicht. Informatik 1 Teil 10 Dateien

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

GI Vektoren

Strukturen können wie normale Variablen an Funktionen übergeben werden. Strukturen können auch Ergebnis einer Funktion sein

Dateien. INE2, Mittwoch / TE402 M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Übungspaket 30 Kopieren von Dateien

Übungspaket 30 Kopieren von Dateien

Zusammenfassung des Handzettels für Programmieren in C

Ein- und Ausgabe mit Dateien

Modellierung und Programmierung

Physische Dateistrukturen

Testklausur zur Vorlesung. Programmieren in C

Arrays (Felder/Vektoren)

C/C++-Programmierung

Dateien lesen und schreiben mit php

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Ein- und Ausgabe mit Dateien

einlesen n > 0? Ausgabe Negative Zahl

+ C - Formatierte Eingabe mit scanf()

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Praxis der Programmierung

Lesen Sie alle Aufgabenstellungen sorgfältig durch, bevor Sie mit der Bearbeitung der ersten Aufgabe beginnen.

Informatik für Ingenieure (InfIng)

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

10 Lesen und Schreiben von Dateien

Programmieren in C. Die C-Standardbibliothek. Prof. Dr. Nikolaus Wulff

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Programmieren in C++

Musterlösung. Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

Grundlagen der Informatik

Funktionen. Datentypen Zeiger. Vorlesung Computergrundlagen WS 2010/2011, x y = x + 6

Programmierung mit C Datei-Ein- und Ausgabe

7. Abgeleitete Datentypen

INE1 Ein-/Ausgabe, Dateien (Files) Einführung Datenstruktur und Operationen Textdateien Binärdateien Standard Streams

Musterlösung der Testklausur zur Vorlesung. Programmieren in C. Prof. Dr. Nikolaus Wulff WS/SS 2004/05

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Hello world. Sebastian Dyroff. 21. September 2009

ios fstream ifstream

U8 7. Übung U8 7. Übung

Inhalte. Einführung. Algorithmus, Programmiersprache, Compiler und Linker. Kontrollstrukturen. Präprozessoranweisungen. Libraries

Tafelübung zu BS 4. Dateioperationen

entweder: zeilenweise fgets() oder: zeichenweise fgetc()

Programmieren in C/C++ und MATLAB

Einführung in die Programmierung für Physiker. Die Programmiersprache C Ein- und Ausgabe

Dateiverarbeitung Pearson Education, Inc. All rights reserved.

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

C Überlebenstraining

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Informatik III: Aufgabenblock 1. 1 Datei eintippen, Programmkopf erstellen, kompilieren

Programmiersprachen Einführung in C

Moderne C-Programmierung

Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. FB Automatisierung und Informatik.

Linux. Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm. Hochschule Harz. FB Automatisierung und Informatik.

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

5. Dateioperationen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

VORLESUNGSUNTERLAGEN ZU PROGRAMMIEREN 2

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

8. Strukturen und Dateien Strukturen und Dateien

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm

Die Programmiersprache C. 1. Überblick und Einführung

Systemnahe Programmierung in C/C++

2. Programmierung in C

QuickC - Schnellkurs in C

Einstieg in die Informatik mit Java

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

Vorlesung Programmieren

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung B.Sc. Patrik Schmittat

Schleifen. Auch das Berechnen von Produkten kann analog formuliert werden.

Beispiel Block 2 Stream I/O Parallele Prozesse: fork, exec und wait Interprozesskommunikation mit Unnamed Pipes

Eine Mini-Shell als Literate Program

Dienstspezifikation nach RFC

Programmierung mit C Felder; Array

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Dr. Monika Meiler. Inhalt

C für Java-Programmierer

Lösungen der P1-Musterprüfungsaufgaben

Transkript:

Programmieren in C Die C-Standardbibliothek: Datei Ein- und Ausgabe Prof. Dr. Nikolaus Wulff

Das Dateisystem In C erfolgt die gesamte Ein- und Ausgabe durch Lesen oder Schreiben von Strömen (stream). Periphere Geräten werden immer mit der selben einheitlichen Schnittstelle angesprochen. Konsole stdout und die Tastatur stdin werden in C als Dateien modelliert, die beim Programmstart bereits geöffnet worden sind. Beim Programmstart kann diese Vorbelegung übersteuert werden: progamm.exe < eingabe.txt > ausgabe.txt Prof. Dr. Nikolaus Wulff 2

FILE und <stdio.h> FILE ist als Struktur in <stdio.h> deklariert: #ifndef _FILE_DEFINED struct _iobuf { int _cnt; /* Anzahl Zeichen */ char *_ptr; /* Zeiger auf Zeichen */ int _flag; /* Art des Dateizugriff */ char *_base; /* Zeiger auf Puffer */ int _file; /* File Deskriptor */... ; typedef struct _iobuf FILE; #define _FILE_DEFINED extern FILE _iob[]; #define stdin (&_iob[0]) #define stdout (&_iob[1]) #define stderr (&_iob[2]) Prof. Dr. Nikolaus Wulff 3

Datei Funktions Makros Viele häufig benötigte Funktion zur Ein- und Ausgabe entpuppen sich als einfache Makros: #define getc(_stream) (--(_stream)->_cnt >= 0 \? 0xff & *(_stream)->_ptr++ : _filbuf(_stream)) #define putc(_c,_stream) (--(_stream)->_cnt >= 0 \? 0xff & (*(_stream)->_ptr++ = \ (char)(_c)) : _flsbuf((_c),(_stream))) #define getchar() #define putchar(_c) getc(stdin) putc((_c),stdout) Wie die Deklarationen exakt aussehen hängt vom verwendeten Compiler und Betriebssystem ab. Daumenregel: interne Bezeichner mit _XXX nicht verwenden, diese sind meist nicht portabel. Prof. Dr. Nikolaus Wulff 4

Datei Funktionen Wichtige IO-Funktionen sind: fclose, fopen Stream schließen oder öffnen feof Testet ob Stream zu Ende ist ferror Testet Stream auf Fehler fflush Leert Puffer eines Streams fgetc, fputc Liest/schreibt ein Zeichen fgets, fputs Liest/schreibt eine Zeichenkette fscanf, fprintf Liest/schreibt formatierte Daten fread, fwrite Unformatiertes Lesen/Schreiben printf/scanf sind nur Spezialfälle von fprintf/fscanf. Prof. Dr. Nikolaus Wulff 5

Datei Zeichenweise einlesen int c; FILE *stream = fopen("test.txt","r"); while(!feof(stream)) { c = fgetc(stream); printf("%c",c); fclose(stream); Das obige Codefragment liest eine Datei test.txt. Die Datei wird mit dem read-only Parameter r im Lesemodus geöffnet. Schreiben ist w... Am Ende wird die Datei wieder geschlossen, d.h. die Resourcen werden an das Betriebssystem zurückgegeben. Prof. Dr. Nikolaus Wulff 6

Datei Zeilenweise einlesen #define MAX_LEN 256 void readfile() { char* line = malloc(sizeof(char)*max_len); FILE *stream = fopen("test.txt","rt"); while(!feof(stream)) { fgets(line, MAX_LEN, stream); printf("%s",line); fclose(stream); free(line); fgets liest Textdateien zeilenweise ein. Der notwendige Puffer, in dem die Zeile von fgets kopiert wird, wurde zuvor mit malloc bereitgestellt. rt read text weist das Öffnen einer Textdatei an. Prof. Dr. Nikolaus Wulff 7

Formatierte Datei einlesen void readfile() { float x; int i; char string[] = "interner Puffer gross genug"; FILE *stream = fopen("test.txt","r"); while(!feof(stream)) { fscanf(stream, "%d %s %f",&i, string, &x); printf("%s %d %f \n",string, i, x); fclose(stream); Dateien mit fester Formatierung lassen sich mit fscanf einlesen. fscanf benötigt die Adressen der zu lesenden Variablen, deshalb &x und &i! Prof. Dr. Nikolaus Wulff 8

Zeichenkette schreiben FILE *stream; char *string = "Hallo World"; stream = fopen("stext.txt","wt"); fputs(string,stream); fclose(stream); fputs ist das Gegenstück zu fgets fputs schreibt eine Zeichenkette in eine Textdatei. Prof. Dr. Nikolaus Wulff 9

Formatiertes Schreiben FILE *stream; int i = 2; float x = 3.14; char* s = "hallo"; stream = fopen("stext.txt","wt"); fprintf(stream,"%d %s %f",i,s,x); fclose(stream); fprinft schreibt in Textdateien. Alle Formatanweisungen von printf gelten analog. Prof. Dr. Nikolaus Wulff 10

Unformatiertes Schreiben typedef struct { char name[40]; char surname[40]; int age; Person; void writepersons(file *stream, int len, Person persons[]) { /** write array size */ fwrite(&len,sizeof(int),1,stream); /** write array at once */ fwrite(persons,sizeof(person),len,stream); fwrite schreibt unformatierte Daten. Stream im Modus wb für write binary öffnen. Bei Arrays erst die Feldlänge len ausgeben, dann geht später das Lesen einfacher... Prof. Dr. Nikolaus Wulff 11

Unformatiertes Lesen Person* readpersons(file *stream, int *len) { Person *persons; /** read array size */ fread(len,sizeof(int),1,stream); /** allocate array */ persons = malloc(*len*sizeof(person)); assert(persons!= NULL); /** read array at once */ fread(persons,sizeof(person),*len,stream); return persons; fread ist das Gegenstück zu fwrite. Zum Lesen wird zunächst die Feldlänge eingelesen Dann Speicher alloziert und die Daten gelesen. Achtung: len wurde als Zeiger übergeben... Prof. Dr. Nikolaus Wulff 12

Weitere IO-Funktionen Neben printf / scanf und fprintf / fscanf gibt es Methoden, die direkt Speicheradressen verwenden: sscanf sprintf Liest formatiert von einer Zeichenkette Schreibt formatiert eine Zeichenkette Zusätzlich gibt es noch analoge Schreibmethoden für variable Argumentlisten aus <stdarg.h>: vprintf, vsprintf, vfprintf Prof. Dr. Nikolaus Wulff 13

Komfortable Debug Messages #define MAXSTRING 512 int debugenabled = 1; FILE *out = stdout; void debug(char* file, int line, const char* fmt,...) { int len; va_list args; char message[maxstring]; char *msg = message; if (debugenabled) { sprintf(msg,"debug %s [%d]: ",file, line); len = strlen(message); msg += len; va_start(args, fmt); vsnprintf(msg, MAXSTRING - len, fmt, args); va_end(args); fprintf (out,"%s",message); Kombinierte Anwendung von sprintf und vsnprintf, um formatierte Debug Nachrichten variabler Länge auszugeben. Prof. Dr. Nikolaus Wulff 14

Zusammenfassung In <stdio.h> sind viele stream -basierte IO Funktionen definiert, die ein einheitliches Schreiben und Lesen ermöglichen. Hierbei ist es dann unerheblich ob dies die Tastatur, die Shell, eine Datei oder Speicheradresse ist. Auf den ersten Blick verwirrend, aber eigentlich genial. Es handelt sich um Quellen und Senken, die durch Ströme verbunden sind... Die Beschäftigung mit dem Prinzip und der Logik dieser Methoden ist sicherlich lohnend, da sie in jeder Programmiersprache immer wieder vorkommen. Prof. Dr. Nikolaus Wulff 15