C++ c++;,linux-mmap()对程序创建的文件的权限被拒绝,创建的文件已打开所有权限

C++ c++;,linux-mmap()对程序创建的文件的权限被拒绝,创建的文件已打开所有权限,c++,linux,mmap,C++,Linux,Mmap,权限一直被拒绝,但据我所知,我的权限是完全开放的 //snip int outfile=creat(“outfile.txt”,O|RDWR | O|creat | S|IRWXU | S|IRWXG | S|IRWXO); 如果(输出文件

权限一直被拒绝,但据我所知,我的权限是完全开放的

//snip
int outfile=creat(“outfile.txt”,O|RDWR | O|creat | S|IRWXU | S|IRWXG | S|IRWXO);
如果(输出文件<0)
{
库特
这里有两个问题:

  • create
    以只写模式创建文件,它的第二个参数是
    mode\u t
    掩码。在此处传递
    O\u
    标志,与
    s\u
    模式位叠加,会导致无意义的垃圾

  • mmap
    调用的参数需要一个
    O_RDWR
    文件描述符,如上所述,
    O_RDWR
    参数被解释为文件权限位,而不是文件打开模式

  • 这应替换为带有三个参数的
    open()

    int outfile = open("outFile.txt", O_CREAT | O_TRUNC | O_RDWR,
               S_IRWXU | S_IRWXG | S_IRWXO);
    

    谢谢,这是可行的,但是说明中说“输出文件是使用creat从pgm内部创建的。”我不知道这是否是教授故意的,但似乎不太可能。因此,使用
    creat
    创建文件,写出它,关闭它,然后
    open()
    it和
    mmap()
    it。底线:如果文件描述符是使用
    create
    创建的,则无论教授怎么说,都不能使用这些
    mmap
    标志创建文件。此外,除非生成脚本,否则您可能不希望对文本文件具有执行权限。
    int outfile = creat("outFile.txt", O_RDWR | O_CREAT | S_IRWXU | S_IRWXG | S_IRWXO);
    
    int outfile = open("outFile.txt", O_CREAT | O_TRUNC | O_RDWR,
               S_IRWXU | S_IRWXG | S_IRWXO);