Datei kopieren



  • Hallo Forum,

    ich möchte ein kleines Programm unter Unix schreiben, welches mir eine Datei kopiert. Mein Problem liegt teilweise im Verständnis der Parameterversorgung der Funktionen read(), creat(), write(). Allein mit der Manpage komme ich nur wenig zurecht. Im Internet fand ich leider auch so gut wie keine Erläuterungen oder Beispielprogramme. Vielleicht habe ich auch schlecht gesucht!?

    Was ich auch nicht verstanden habe ist, Funktion read():
    Der genaue Unterschied zwischen Buffer und size!?
    Der Buffer wird doch verwendet um eine bestimmte Anzahl Bytes in den Arbeitsspeicher zu laden, wozu braucht man dann size?

    Würde mich freuen wenn sich ein erfahrener Programmierer mal mein bisheriges Programm anschauen könnte, und mir evtl. zeigen könnte was ich vergessen bzw. falsch gemacht habe. Danke schon mal.

    #include <stdio.h>
    #include <sys/types.h>	//open(), creat()
    #include <sys/stat.h>	//open(), creat()
    #include <fcntl.h>	//open(), creat()
    #include <unistd.h> 	//read(), write()
    
    int main()
    {
    	const char *quell_datei = "quelle.txt"; 
    	const char *ziel_datei = "ziel.txt";
    	char buffer[4096];
    	int size = 4069;
    	int in, out, length;
    
    	if ( (in = open(quell_datei, O_RDONLY)) == -1 )	// Quelldatei öffnen 
    		printf("Datei nicht vorhanden");
    	else {
    		length = read(in, buffer, size); // Quelldatei lesen
    		printf("Groesse der eingelesenen Datei: %i",length);
    
    		out = creat(ziel_datei, O_WRONLY); //Zieldatei erzeugen
    
    		write(out, buffer, length);
    	}
    
    	close(in);
    	close(out);
    
    return 0;
    }
    

    Das Programm ist nicht vollständig, hier wird max. 4096byte kopiert. Das soll auch vorerst mal so bleiben. Mein Ziel ist es, einfach nur mal eine Datei zu kopieren. Achso, die Zieldatei wird zwar erzeugt, kann sie aber über den Windows-Explorer nicht öffnen: "Zugriff verweigert". In der Manpage zu creat() steht:

    Die Definition wird, wie üblich, durch die Umgebungsvariable umask übernommen. Die Zugriffsrechte der angelegten Datei werden durch (mode & ~umask) festgelegt.

    Auch noch so en Ding, keine Ahnung wie ich in creat() die Zugriffsrechte richtig definiere!? Danke schon mal für die Hilfe.

    Gruß



  • morpheus0023 schrieb:

    Was ich auch nicht verstanden habe ist, Funktion read():
    Der genaue Unterschied zwischen Buffer und size!?

    Betrachtet man die Deklaration in der Man-Page:

    ssize_t read(int fd, void *buf, size_t count);
    

    zusammen mit der Erklärung:

    read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf.

    sieht man, dass "buf" ein Zeiger auf die Adresse ist, wo die Daten hin geschrieben werden.

    Siehe auch read (2).

    Martin



  • schau dir mal den pronix-c-kurs an !
    da steht eine vernünftige erklärung aller deiner fragen und ausserdem viele beispiele .
    er steht hier "vor" dem forum
    also: www/c-plusplus.net



  • Hi,

    hast du auch en link zu pronix-c-kurs ?

    er steht hier "vor" dem forum
    also: www/c-plusplus.net

    kA was du damit meinst !?



  • die antwort war ja mal ein-eindeutig 😋



  • oh mann,
    mehr überheblichkeit bitte.

    für alle anderen: http://www.pronix.de/
    ich denke er müsste diese seite gemeint haben.



  • Beruhig Dich; Martins Verweis war doch eigentlich recht gut verständlich, oder?



  • das war doch wohl klar , dass mir ein Tippfehler unterlaufen war:noch nie stand hinter www ein / , - oder ??

    also nochmal richtig:
    www.c-plusplus.net
    hier findet man mehrere c- kurse und u.a. auch den pronix.



  • hi,

    www/c-plusplus.net

    jap, hab mir denken können das es ein schreibfehler war, nur

    er steht hier "vor" dem forum

    wer oder was steht hier vor dem forum!?
    dann in kombination mit dem obigen schreibfehler, hat mich das alles etwas verwirrt. so viel zur aufklärung.

    ach übrigens, http://www.pronix.de/ ist genau das was ich suchte, thx...


Anmelden zum Antworten