在我的代码中,我有以下片段:
char* filename="/something.txt";
umask(0);
int filehandle=open(filename,O_WRONLY|O_CREAT|0x777);
close(filehandle);
在执行该文件时,将创建该文件,但即使我完全跟踪文档,也没有正确设置权限。
文件规定:
参数模式指定在新文件被重新处理时使用的权限。它按照通常的方式被进程的umask修改:创建的文件的权限是(mode & ~umask)。
对于模式,我指定了0x777,意思是读、写和执行。对于umask,我指定了零,所以0x777 & ~0
应该得到777。
实际结果的权限为670。
那是为什么,我该怎么解决?
发布于 2015-10-19 02:22:24
首先,它应该是八进制0777
,而不是十六进制0x777
,对应的内容如下:
0x777 0111 0111 0111 011 101 110 111 r-xrw-rwx, plus other stuff(a)
0777 111 111 111 111 111 111 rwxrwxrwx
第二,签名是:
int open(const char *pathname, int flags, mode_t mode);
这意味着模式是一个单独的参数,而不是带有标志的or
。
因此,您要寻找的行是:
int filehandle = open (filename, O_WRONLY | O_CREAT, 0777);
(a)我认为POSIX保留了未指定的上层位,但是Linux会使用它们来表示文件是setgid
和sticky
(虽然不是原始的粘性意义上的代码被缓存在交换空间中-- Linux从来不支持这一点,而是使用粘滞位来限制谁可以对粘性目录中的文件执行某些操作)。
https://stackoverflow.com/questions/33205558
复制相似问题