Domanda

Sto lavorando su un progetto linux C e sto avendo problemi a lavorare con i descrittori di file.

Ho un descrittore di file orfani (il file è stato aperto () 'd allora unlink ()' d, ma il fd è ancora buono), che ha permesso di sola scrittura. Il file di supporto originale aveva le autorizzazioni complete (creati con S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), ma ahimè il file è stato aperto con O_WRONLY. E 'possibile duplicare il descrittore di file e modificare la copia per O_RDWR?

psudo-codice:


//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???----

Grazie in anticipo! -Andrew

È stato utile?

Soluzione

No, non v'è alcuna funzione POSIX per cambiare la modalità di apertura. Avrete bisogno di aprirlo in modalità di lettura / scrittura. Dal momento che si è creato un file temporaneo, però, vi consiglio vivamente di utilizzare mkstemp . Tale funzione si apre correttamente il file in modalità di lettura / scrittura e scollega it . Ancora più importante, evita una condizione di competizione nella denominazione e la creazione del file, evitando così una vulnerabilità nella creazione di file temporanei.

Altri suggerimenti

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top