Cambiar permisos de lectura / escritura en un descriptor de archivo
Pregunta
Estoy trabajando en un proyecto de C de Linux y estoy teniendo problemas para trabajar con los descriptores de fichero.
Tengo un descriptor de archivo huérfano (el archivo estaba abierto () 'd continuación unlink ()' d pero el FD es todavía bueno) que tiene permiso de sólo escritura. El archivo de respaldo original tenía los permisos (creados con S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), pero por desgracia el archivo se abrió con O_WRONLY. ¿Es posible duplicar el descriptor de archivo y cambiar la copia de O_RDWR?
psudo-código:
//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???----
Gracias de antemano! -Andrew
Solución
No, no hay ninguna función POSIX para cambiar el modo de apertura. Usted tendrá que abrirlo en modo de lectura / escritura. Puesto que usted está creado un archivo temporal, sin embargo, le recomiendo encarecidamente que utilice mkstemp . Esa función se abre correctamente el archivo en modo lectura / escritura y desvincula que . Lo más importante, evita una condición de carrera en el nombramiento y la creación del archivo, lo que evita una vulnerabilidad en la creación de archivos temporales.
Otros consejos
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