Ändern Lese- / Schreibberechtigungen auf einem Dateideskriptor
Frage
Ich bin auf einem Linux-C-Projekt arbeiten, und ich habe Probleme mit Filedeskriptoren arbeiten.
Ich habe eine Waise Dateideskriptor (die Datei geöffnet war () ‚d dann unlink ()‘ d aber der fd ist immer noch gut), die Nur-Schreib-Berechtigung hat. Die ursprüngliche Trägerdatei hatte vollständige Berechtigungen (erstellt mit S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), aber leider die Datei mit O_WRONLY eröffnet. Ist es möglich, den Dateideskriptor zu kopieren und die Kopie O_RDWR ändern?
psudo-Code:
//open orphan file
int fd = open(fname, O_WRONLY, ...)
unlink(fname)
//fd is still good, but I can't read from it
//...
//I want to be able to read from orphan file
int fd2 = dup(fd)
//----change fd2 to read/write???----
Vielen Dank im Voraus! -Andrew
Lösung
Nein, es gibt keine POSIX-Funktion, um den offenen Modus zu ändern. Sie werden es im Lese- / Schreibmodus öffnen müssen. Da Sie eine temporäre Datei erstellt werden, obwohl, empfehle ich dringend, dass Sie mkstemp . Diese Funktion öffnet die Datei ordnungsgemäß im Lese- / Schreibmodus und es Solange LINK . Am wichtigsten ist, es vermeidet eine Race Condition bei der Benennung und Erstellen der Datei, wodurch eine Sicherheitslücke bei der Erstellung von temporären Dateien zu vermeiden.
Andere Tipps
int fd = open(fname, O_WRONLY, ...)
int fd_ro = open(fname, O_RDONLY, ...)
unlink(fname)
{ write to fd }
close (fd);
read or execute(!) fd_ro