Modifier permissions de lecture / écriture sur un descripteur de fichier
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
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