Eingabedatei aus Umleitung, wie geht das?
-
Hallo,
ich habe ein kleines Problem. Ich möchte eine Datei aus einer Umleitung heraus lesen.
int main(int argc, char** argv){
// Normalfall ist Eingabe der Datei bei Programmaufruf
// programm dateiFILE* fhandle = fopen(argv[1],"r") ;
// Wie erkenne ich das und wa muss ich es machen,
// wenn der Programmaufruf als Beispiel so ist:
// cat datei | programm -//
-
Eigentlich (so gut wie) nix.
Die Daten kommen über stdin.char buffer[256]; while( fgets( buffer, 255, stdin)){ machwasdamit( buffer); }
-
Die Verarbeitung des Dateiinhalts mache ich nach dem fopen normalerweise mit:
FILE* fhandle = fopen(argv[1],"r") ; ... if ( fread(header.signature, sizeof(header.signature), 1, fhandle) != (size_t)1) { ...
Was aber ist
1. mein fhandle ?
2. argv[1] ist dann '-', was muss ich dann machen? anderes fopen?Dieter
-
Nein, stdin ist (wie stderr und stdout) immer geöffnet, man braucht das nicht
explizit mit fopen() zu öffnen. stdin ist ein geöffnets Filehandle.
-
OK. Das heißt, ich muss kein fopen, sondern nur beim lesen
if ( fread(header.signature, sizeof(header.signature), 1, [b]stdin[/b]) != (size_t)1) { ...
eingeben?
Ich habe in dem Programm mehrere Funktionen in denen ich mit fread den Inhalt der geöffneten 'Datei' lese.
Übergabeparameter wäre dann z.B: f1(stdin, xx,yy);
f1 (FILE * fhandle,int xx, int yy){?Dieter
-
Ja. stdin etc. sind ganz normale FILE*. Man sollte sie nicht öffnen oder
schließen.