2012-02-21 56 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; 
}