2012-02-21 50 views
2

我正在使用open函數創建一個文件並使用O_CREAT | O_EXCEL。我已經通過了「0666」模式。但通過最終掩蓋分配給它的許可是-rw-r-r--而不是 -rw-rw-rw-。有人告訴我,我可以使用umask(011),然後重新設置原始蒙版。 但我不知道如何通過這個在c + +程序。這是我在做什麼的小片段。如何忽略umask以創建具有給定權限的文件

# include <iostream> 
    # include <stdio.h> 
    # include <conio.h> 
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 

    using namespace std; 

    int main() 
    { 
    int fd = open("C:\\Users\\Ritesh\\Music\\music.txt", O_CREAT | O_EXCL, 0666); 
    getch(); 
    return 0; 
    } 

創建文件C:\Users\Ritesh\Music\music.txt with permission -rw-r--r-- .我想這是-rw-rw-rw-

+1

我很困惑。你如何擁有Unix權限位和DOS路徑名的文件系統?什麼O/S同時提供''和''? – 2012-02-21 16:04:01

+0

@Rob不要擔心我只是複製它而尋找打開的頭文件。我只是在我的Windows系統上使用DEV C++。實際上,我在工作場所中使用了solaris。很抱歉,如果它讓你感到困惑。 – Invictus 2012-02-21 16:09:46

+0

那麼,你問的是哪個系統? Windows還是Solaris? – 2012-02-21 18:18:02

回答

3
 
    mode_t old_mask; 

    old_mask = umask(011); 
    open(...); 
    umask(old_mask); 

+0

確實使用'mode_t old_mask;'給我當前的掩碼設置?和'umask(old_mask);'將它設置回原來的值? – Invictus 2012-02-21 16:14:35

+0

@Ritesh是的。 .. – 2012-02-22 06:05:12

2

的umask意味着你不希望在默認情況下給文件的權限。所以如果你想在創建文件時完全控制權限,請將umask設置爲0,這表示os不會保留任何權限並讓你調用鏡頭。像這樣:

int main() 
{ 
    mode_t oldmask = umask(0); 
    int fd = open("C:\\Users\\Ritesh\\Music\\music.txt", O_CREAT | O_EXCL, 0666); 
    close(fd); 
    umask(oldmask); 
    getch(); 
    return 0; 
}