David: Unix-Systemcalls -> Datei kopieren

Beitrag lesen

Moin Moin,

ich weiß nicht so recht ob das Thema hier reinpasst, bin verzweifelt auf der Suche nach einen erfahrenen Unix / C Programmierer.

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ß
David