PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/Systemcalls] Rechte für Datei auslesen



tomcom
18-10-2008, 13:34
Hallo, ich möchte ein Programm schreiben, das eine Datei byteweise kopiert.
Dabei soll die Zieldatei, die selben rechte haben, wie sie die orginal Datei hat.


handler_read = open(orginaldatei, O_RDONLY );
int rechte = 0777;//soll eigentlich sein: orginaldatei.getRechte()???
handler_write = open(copydatei, O_WRONLY |O_CREAT |O_TRUNC, rechte);

Was würde mit den Rechten der copydatei geschehen, wenn sie bereits existiert?

Die Orginalrechte bleiben bestehen?
Die Rechte von orginaldatei gelten auch für copydatei?


Vielen Dank für eure Hilfe,
Thomas

msi
18-10-2008, 13:48
die rechte der datei kannst du mit dem systemcall stat [1] holen.
der zweite parameter ist ein pointer auf ne struct stat. dort wird
im feld st_mode gespeichert welche zugriffsrechte die datei hat.

die rechte werden von open, falls O_CREAT angegeben ist
entsprechend den flags gesetzt.

Anmerkung:
eine Datei byte Weise zu kopieren ist ziemlich inperformant.
Benutz lieber einen Buffer der eine Speicherseite also 4096 Bytes
groß ist.

[1] http://linux.die.net/man/2/stat

tomcom
18-10-2008, 14:47
Cool, es klapt. Danke.

P.S, Die Größe 1 Byte wurde vorgegben (Aufgabe in der Uni).

jan61
20-10-2008, 18:50
Moin,


...die rechte werden von open, falls O_CREAT angegeben ist entsprechend den flags gesetzt...

nach meiner Info nicht ganz (aus man 2 open):

The argument mode specifies the permissions to use in case a
new file is created. It is modified by the process's umask in the usual
way: the permissions of the created file are (mode & ~umask).Deine Aussage stimmt also nur, wenn umask auf 000 sitzt.

Jan