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

StackOverflow https://stackoverflow.com/questions/4637523

  •  08-10-2019
  •  | 
  •  

Вопрос

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

У меня есть дескриптор файла сирорта (файл был открыт (), то, затем Unlink () D, но FD все еще хорош), которое имеет разрешение только для записи. Оригинальный файл для резервного копирования имел полные разрешения (созданные с S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), но ALAS файл был открыт с 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???----

Заранее спасибо! -Андрей

Это было полезно?

Решение

Нет, нет функции 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top