Изменить права на чтение / запись для файлового дескриптора - PullRequest
10 голосов
/ 09 января 2011

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

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

псевдокод:


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

6 голосов
/ 09 января 2011

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

0 голосов
/ 21 апреля 2018
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
...