Stdin
-
Hallo ich habe ein proc geschrieben welches mit den parametern input.csv und output.csv aufgerufen wird. In den Output wird der Input (behandelt mittels struct) binär geschrieben. (Funktioniert)
Nun möchte ich aber, dass wenn man statt der csv datei einen "-" angibt, dass das programm vom stdin liest und/oder in den stout schreibt. Gut das schreiben ist kein prob (printf), aber das lesen. Gibt es nur die Möglichkeit mittels fscanf zu arbeiten oder kann ich dem Programm auch sagen er soll einlesen solange bis EOF.
Also
File *bla = stdin bis EOF.
So in der Art halt ;).LG
-
Du liest von stdin genauso wie von Dateien, nur dass es bei stdin kein EOF gibt.
stdin ist eine globale Variable vom Typ FILE*.
-
Janjan schrieb:
Du liest von stdin genauso wie von Dateien, nur dass es bei stdin kein EOF gibt.
stdin ist eine globale Variable vom Typ FILE*.
eigentlich schon. Wenn du z.B.
cat file | programm
ausführst, dann bekommt man EOF, wenn das letzte Zeichen von 'file' die Pipe verlässst bzw. wenn man Strg+D bei der Eingabe eingibt.
-
Eben mit STRG-D und da dachte ich, dass ich das ganze einfach aufrufen/einlesen kann, bis EOF dh. STRG-D betätigt wird. Aber wie ;).
Das stdin vom typ File * ist, ist mir bewusst, jedoch weiß ich nicht wie ich ein einlesen bis EOF aufrufen kann (fscanf ist ja nur bis zu einem Enter).
LG
-
genauso wie mit normalen FILE Objketen: mit fgets, fgetch, getchar, usw. bis feof(stdin) true bzw. getc EOF zurückgibt. Wo ist das Problem?
-
while ( (c = getchar()) != EOF){ machwasdamit ... }
Ist EOF nicht ^Z ?
-
Ich kann ja auch mit fgets(test,54,stdin)=NULL die zeilen einzeln einlesen die im stdin stehen ist das korrekt?
Und wenn ja, wenn ich zuvor getchar() (wie vorher angegeben) aufrufe, ist dann der stdin damit befüllt?
LG
-
Scheppertreiber schrieb:
Ist EOF nicht ^Z ?
Das musst du wohl dein Terminal fragen.
movco schrieb:
Das stdin vom typ File * ist, ist mir bewusst, jedoch weiß ich nicht wie ich ein einlesen bis EOF aufrufen kann
Das geht so:
char buf[1024]; size_t size; FILE *fp; fp = fopen("test.txt", "r"); if (fp == NULL) /* nicht weitermachen, weil Datei nicht lesbar */ /* Groesse in 'size' speichern */ fseek(fp, 0, SEEK_END); size = ftell(fp); fseek(fp, 0, SEEK_SET); if (size >= sizeof(buf)) /* nicht weitermachen, weil Puffer zu klein */ /* Datei nach 'buf' lesen */ fread(buf, 1, size, fp); /* Datei zurückgeben */ fclose(fp); /* mit Nullbyte abschliessen */ buf[size] = 0;
-
Janjan schrieb:
Du liest von stdin genauso wie von Dateien, nur dass es bei stdin kein EOF gibt.
Huh, seit wann denn nicht?