2015-11-05 3 views
1

Есть ли способ в стандартных библиотеках C++ (или linux sys/stat.h, sys/types.h, sys/.... libraries), чтобы установить права доступа к файлу файл при создании с ofstream (или используя что-то еще из этих библиотек)?Настройка разрешений для файлов при открытии файла с помощью потока

Когда я создаю файл, он просто получает созданный с помощью некоторого набора по умолчанию права доступа к файлам (я предполагаю, независимо от текущего umask есть), но я хочу, чтобы явно установить разрешения на нечто иное, чем по умолчанию в (напр. 600), и я не могу просто установить umask перед запуском программы (b/c другие будут запускать ее).

// Example of creating a file by writing to it 
ofstream fp(filename.c_str()) 

/* write something to it */ 

Есть ли способ сделать это в C++ или, если нет, то способ установить umask в рамках программы на C++?

Например, в стандартной библиотеке языка C вы can just do:

open(filename, O_RDWR|O_CREAT, 0666) 

, но я не хочу прибегать к использованию функции C, так как было бы хорошо, чтобы иметь возможность использовать функции, связанные с fstream объектов.

(Side Примечание: был question чье название было именно то, что я искал, но оказалось, что не имеет отношения.)

+0

Нет, C++ не знает прав доступа к файлам. (Сначала создайте файл, используя системные функции, а затем откройте поток C++) –

+0

Вы имеете в виду что-то вроде открытия файла с помощью функции '' '' '' '' '' '' '' ', закройте этот дескриптор файла, а затем откройте его снова, используя' ofstream' ? – xgord

+0

Существует экспериментальная библиотека [Filesystem library TS] (http://en.cppreference.com/w/cpp/experimental/fs) – NathanOliver

ответ

4

Вы не можете. Стандартная библиотека должна быть агностической для платформы, и разрешения, например, 0600, не имеют смысла в Windows, например. Если вы хотите использовать специфичные для платформы функции, вам нужно будет использовать API-интерфейсы платформы. Конечно, вы всегда можете позвонить umask() перед тем, как открыть файл, но это не входит в стандартную библиотеку C++, это часть API платформы.

Примечание: open() также не является частью стандартной библиотеки C. Это API платформы. Функция стандартной библиотеки C для открытия файла - fopen().

+0

Это правда сейчас, но есть TS для файловых систем, которые позволят нам сделать это переносимо. [Библиотека файловой системы TS] (http://en.cppreference.com/w/cpp/experimental/fs) – NathanOliver

+0

Этот TS отлично подходит для многих вещей, но разрешения не относятся к тому, что он делает хорошо (на не-linux системы по крайней мере). –

+0

Я еще не играл с ним, поэтому я задержу ваше слово. – NathanOliver

Смежные вопросы