2015-11-05 821 views
1

在C++的標準庫(或linux sys/stat.h,sys/types.h,sys/....庫)中設置文件權限文件創建時使用ofstream(或使用其他庫中的其他文件)?使用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++或者如果沒有做到這一點,一個方法來設置C++程序中umask

例如,在C標準庫你can just do

open(filename, O_RDWR|O_CREAT, 0666) 

,但我不希望訴諸使用C函數,因爲它會是不錯的能夠使用與相關的功能fstream對象。

側面說明:有一個question其標題正是我一直在尋找,但它竟然是無關

+0

不,C++不知道文件權限。 (首先創建文件,使用系統函數並打開C++流) –

+0

你的意思是使用C的open函數打開文件,關閉該文件描述符,然後使用'ofstream'再次打開它? – xgord

+0

有實驗[Filesystem library TS](http://en.cppreference.com/w/cpp/experimental/fs) – NathanOliver

回答

4

你不能。標準庫必須是平臺不可知的,例如,在Windows上,像0600這樣的權限是沒有意義的。如果您想要使用特定於平臺的功能,則需要使用平臺特定的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