• Keine Ergebnisse gefunden

UNIX: Gemeinsame Schnittstelle für alle angeschlossenen Geräte.

N/A
N/A
Protected

Academic year: 2021

Aktie "UNIX: Gemeinsame Schnittstelle für alle angeschlossenen Geräte."

Copied!
26
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wenn der Hauptspeicher nicht

ausreicht

(2)

UNIX: Gemeinsame Schnittstelle für alle angeschlossenen Geräte.

2 Möglichkeiten

Buffered (high level) Unbuffered (low level)

Stream: Gepufferte Schnittstelle

für Datenaustausch zwischen

(3)

Zusammenhängende Folge von Bytes

Textdatei ist ein Stream, dessen Bytefolge als ASCII-Codes

interpretiert wird

Binärdatei ist eine Bytefolge, die

Computer-interne Datendarstellung

(4)

Die FILE -Struktur (stdio.h)

#define MAX_FILE_NUM 20 typedef struct {

int level;

unsigned int flags;

char path;

unsigned char hold;

int bsize;

unsigned char *buffer;

unsigned char *nextc;

(5)

FILE *stdin = _iob[0]

ist die Standard Eingabedatei, die Daten von der Tastatur bekommt

FILE *stdout = _iob[1]

ist die

Standard Ausgabedatei, die Daten auf den Bildschirm ausgibt

wird für

(6)

Zur Verfügung stellen:

fopen(),

fclose(), fflush(), setbuf(),

usw.

Lesen und Schreiben:

fprintf(), fputc(), fscanf(), fgetc(),

usw.

Positionierung:

fgetpos(), fsetpos(), fseek(), ftell(), rewind(),

usw. Für

Direktzugriff

(7)

FILE *fopen(char *Dateiname, char *mode);

Rückgabewert: Zeiger auf

FILE

oder

NULL mode

:

"r"

heißt read (lesen)

"w"

heißt write (schreiben)

"a"

heißt append (am Ende schreiben)

(8)

int fclose(FILE *fp);

Entleert Dateipuffer und löst alle Verbindungen zur Datei

Rückgabewert:

0

bei Erfolg,

EOF

bei

Mißerfolg

(9)

int fscanf(FILE *fp, char *format, arg1, ..., argn);

Liest von

*fp

unter Steuerung von

format

und schreibt die umgewandelten Werte an die Adressen

arg1, ..., argn

EOF

(10)

! "

int fgetc(FILE *fp);

holt das nächste Zeichen aus dem Puffer.

Rückgabewert: ASCII-Wert oder

EOF

(11)

int fprintf(FILE *fp, char *format, arg1, ... , argn);

Schreibt auf

*fp

die unter Steuerung von

format

umgewandelten Argumente

arg1, ... , argn

Rückgabewert: Anzahl der geschriebenen

Zeichen oder

EOF

(12)

! "

int fputc(int ch, FILE *fp);

ch *fp

ch EOF

(13)

#

int feof(FILE *fp);

Rückgabewert: positive int , falls

Ende der Datei erreicht worden ist

(14)

int fflush(FILE *fp);

char *fgets(char * wo, int wieviel, FILE

*fp);

int fputs(const char *was, FILE *fp);

int ungetc(int c, FILE *fp);

(15)

$

Beim Kopieren kleine Buchstaben in Großbuchstaben umwandeln

kopieren <Ausgangsdatei> <Zieldatei>

!

(16)

% &

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[]){

int c;

FILE *input_file, *output_file;

if (argc < 3){

fprintf(stderr, "Verwendung: %s <eingabe>, <ausgabe>,

*argv); exit(1);}

if ((input_file = fopen(*++argv, "r")) == NULL){

fprintf(stderr, "\n%s kann nicht geöffnet werden",

*argv); exit(1);}

if ((output_file = fopen(*++argv, "w")) == NULL){

fprintf(stderr, "\n%s kann nicht angelegt werden",

(17)

' & ! ( &

"

while ((c = fgetc(input_file)) != EOF) if ('a' <= c && c <= 'z')

fputc(c + 'A' - 'a', output_file);

else

fputc(c, output_file);

fclose(input_file);

fclose(output_file);

return 0;

}

(18)

) *

Bisher wurden Dateien sequentiell verarbeitet

Direktzugriff heißt "Direkt zum Datensatz springen"

Offsets müssen angegeben werden

Für Binärdateien geeignet

(19)

+,

positionieren Dateicursor.

rewind()

am Anfang der Datei

lseek()

und

fseek() offset

bytes bzgl

base

offset

! " # $

void rewind (FILE *fp);

long lseek(FILE *fp, long offset, int base);

int fseek(FILE *fp, long offset, int base);

(20)

base - " "

base = SEEK_SET

heißt vom Anfang der Stream

base = SEEK_CUR

heißt von aktuellen Dateiposition aus

base = SEEK_END

heißt vom Ende der

Stream

(21)

$

fseek (fp, 0l, SEEK_SET);

bedeutet:

zum Anfang der Datei springen (wie

rewind()

&

fseek (fp, -100l, SEEK_CUR);

' % % ( $

(22)

$

Es ist zulässig, die Dateiposition hinter den Stromende zu setzen Es ist nicht zulässig, die

Dateiposition vor Datenanfang zu

setzen

(23)

Lesen:

Schreiben

int fread(void *ptr, int size, int nobj, FILE *fp);

) $

nobj

* + ,

size *ptr

int fwrite(void *ptr, int size, int nobj, FILE *fp);

(24)

$

#include <stdio.h>

typedef struct{

int KontoNr;

char Name[25];

float KontoStand;

} t_Kunde;

int main() {

FILE *fp;

t_Kunde Kunde = {0, "", 0.0};

if ((fp = fopen("kunden.dat", "r+")) != NULL){

printf("Kontonr. bitte eingeben\n: ");

(25)

$ # )

while (Kunde.KontoNr != 0){

printf("Name und Kontostand bitte eintragen: ");

fscanf(stdin, "%s%f", Kunde.Name, &Kunde.KontoStand);

fseek(fp, (Kunde.KontoNr - 1)*sizeof(t_Kunde), SEEK_SET);

fwrite(&Kunde, sizeof(t_Kunde), 1, fp);

printf("Kontonummer bitte eintragen: ");

scanf("%d", &Kunde.KontoNr);

}

fclose(fp);

(26)

$

int main(){

FILE *fp;

t_Kunde Kunde = {0, "", 0.0};

if ((fp = fopen("kunden.dat", "r")) == NULL){

fprintf(stderr, "Datei existiert nicht");

exit(0);}

printf("%-7s%-25s%9s\n","Kontonr", "Name",

"Kontostand");

while(!feof(fptr)){

fread(&Kunde, sizeof(t_Kunde), 1, fp);

if (Kunde.KontoNr != 0)

printf("%-7s%-25s%-9s\n", Kunde.KontoNr, Kunde.Name, Kunde.KontoStand);

Referenzen

ÄHNLICHE DOKUMENTE

abfragen können. Als weiteres Besipiel wollen wir eine Methode codieren, die das Alter zweier Personen vergleicht. Wenn Obj1, Obj2, Obj3 Objekte derselben Klasse sind und

Ländercode+Ohrmarkennummer des zu meldenden Tieres (Pflichtfeld) Zwischen Ländercode und Ohrmarkennummer darf kein Zeichen stehen.. Die Ländercodes entnehmen Sie bitte

University of Tennessee Knoxville TN

Statt dessen soll, einer Variante des Principle of Chari- ty folgend, davon ausgegangen werden, dass die Kontrahenten weitgehend fähig sind, ihre eigenen Motive selbst zu

Ziel der Einzelarbeit ist es sich bewusst zu machen, was einem selbst wichtig ist (meine Werte/Formular A1) und die eigenen Be- dürfnisse im Hinblick auf die Zusammenarbeit

If you did not opt to install a printer (did not complete E, F, G, or H), you must set the Printer portion of the Host/Printer selection in the Quick (F1) Setup menu to “None.”

connecting an ASCII Device to a 7171 Port 27 connecting the host channel cables to the 7171 25 connecting the power cord 23. connection to the host 24 customer responsibility

Указание: Если код стал неизвестен, нажмите расположенную на обратной стороне двери кнопку, чтобы снова восстановить заводские настройки.. В этом случае коды, дата