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

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top