Question

Je travaille sur un projet C linux et je vais avoir du mal à travailler avec des descripteurs de fichiers.

J'ai un descripteur de fichier orphelin (le fichier était ouvert () « d alors unlink () » d, mais le fd est toujours bonne) qui a l'autorisation d'écriture seule. Le fichier de support d'origine avait les autorisations (créé avec S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), mais hélas le fichier a été ouvert avec O_WRONLY. Est-il possible de dupliquer le descripteur de fichier et modifier la copie à O_RDWR?

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

Merci d'avance! -Andrew

Était-ce utile?

La solution

Non, il n'y a pas de fonction POSIX pour changer le mode ouvert. Vous devrez ouvrir en mode lecture / écriture. Puisque vous créez un fichier temporaire, cependant, je recommande fortement que vous utilisez mkstemp . Cette fonction ouvre correctement le fichier en mode lecture / écriture et délie il . Plus important encore, il évite une condition de course en nommant et en créant le fichier, évitant ainsi une vulnérabilité dans la création de fichiers temporaires.

Autres conseils

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top