Bitte um Erklärung dieses Codes.



  • Hallo

    Code:

    #include <uninstd.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    
    int main()
    
    {
    
    char block[1024];
    int in, out;
    int nread;
    
    in = open("file.in", O_RDONLY);
    out = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
    while((nread=read(in,block,sizeof(block))) > 0)
    write(out,block,nread);
    
    exit(0) ;
    
    }
    

    Also ich weiß dass der Code eine Datei in die andere kopiert und zwar in 1KB Blöcken.
    Ich aber allerdings nicht ganz die Funktionen read und write verstanden. Kann mir
    die einer mal genau erklären? Also was genau die Parameter bedeuten und was die machen.
    Ich stell jetzt mal ne Vermutung auf

    1. Parameter bei write : In dem BSP. out und der gibt wohl an wo hinheingeschrieben wird, oder?
    2. Parameter gibt wohl an wie viel auf einmal oder bei einem AUfruf geschrieben wird.
    3. Parameter ???? ist das in dem Fall der Inhalt also z.b. der Text der 1kb beträgt. Also der Inhalt der geschrieben wird?

    Und bei read:

    1. para gibt wohl an von wo aus gelesen wird
    2. wie viel gelesen wird
    3. warum wird hier die größe des Feldes überprüft? Die Funktion nimmt einen Wert an der größer als null sein muss. aber durch was bekommt die Funktion den Wert? Durch das sizeof(block)?

    ok noch ne Frage: gehen wir mal in diese Zeile: out = open("file.out", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);

    hier wird doch einer integer var. ( out ) eine Datei zugeordnet, oder? Wie soll ich das verstehen?
    Die Datei file.out wird erstellt und out zugeordnet. Aber die Datei ist doch noch leer, oder?
    Und wie kann man dann eine Datei einer Var zuordnen?

    Naja vielleicht kommentiert mir mal einfach jemand den Code in dem er jeden Schritt beschreibt.
    Wäre wirkich nett.

    Grüße





  • Wenn du es selber nicht weißt, dann brauchst du auch nichts dazu sagen, auf solche Antworten kann ich getrost verzichten. geh googeln man blabla
    vielleicht bin ich ja so blöd und versteh die man nicht, deshalb will ichs erklärt haben. Ja vielleicht





  • 1. Funktion write
    write(Filehandle , Quelle der zu schreibenden Daten , Anzahl der zu schreibenden Daten);

    Filehandle vom Typ int;
    hier bei dir "out"

    Quelle, const *char
    bei dir ist das char block[1024]

    Anzahl der zu schreibenden Bytes, typ int
    bei dir nread(wieviele bytes eine Zeile weiter oben gelesen wurden)

    2. Funktion read
    read(Filehandle, Buffer in den die Daten gespeichert werden , Anzahl der zu lesenden Daten);

    Filehandle Typ int
    bei dir "in"

    Anzahl der zu lesenden Bytes (könntest hier auch einfach 1024 hinschreiben oder auch sizeof(block));

    read und write geben jeweils die Anzahl der gelesenen Bytes bzw. geschribenen Bytes zurück und bei Fehler -1.



  • @Lx386

    vielen Dank für deine Antwort, genau so hab ich mir das vorgestellt.
    Also nochmals danke.

    Grüße



  • Freut mich dir geholfen zu haben
    gruß lx



  • nux schrieb:

    Wenn du es selber nicht weißt, dann brauchst du auch nichts dazu sagen, auf solche Antworten kann ich getrost verzichten. geh googeln man blabla

    Du hättest ja nichtmal googeln brauchen; einfach den Links folgen; ich für meinen Teil finde Manpages äußerst hilfreich.

    vielleicht bin ich ja so blöd und versteh die man nicht, deshalb will ichs erklärt haben. Ja vielleicht

    Vielleicht solltest Du das dann dazuschreiben statt hier herumzustänkern.


Anmelden zum Antworten