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 datei

    FILE* 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.


Anmelden zum Antworten