Изменение разрешений на чтение / запись в файловом дескрипторе

Я работаю над проектом linux C, и у меня возникли проблемы с файловыми дескрипторами.

У меня есть сиротский файловый дескриптор (файл был открыт ()'d затем unlink ()'d, но fd все еще хорош), который имеет разрешение только на запись. Исходный файл резервной копии имел полные разрешения (созданные с помощью S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), но, увы, файл был открыт с помощью O_WRONLY. Можно ли дублировать файловый дескриптор и изменить копию на O_RDWR?

psudo-код:


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

спасибо заранее! - Эндрю!--2-->

2 ответов


нет, нет функции POSIX для изменения открытого режима. Вам нужно открыть его в режиме чтения / записи. Поскольку вы создали временный файл, я настоятельно рекомендую вам использовать mkstemp. Эта функция правильно открывает файл в режиме чтения/записи и разблокирует его. Самое главное, это позволяет избежать условия гонки в именовании и создании файла, тем самым избегая уязвимости при создании временных файлов.


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