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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top