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);