首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试在C中为所有用户创建完全权限的文件

尝试在C中为所有用户创建完全权限的文件
EN

Stack Overflow用户
提问于 2015-10-19 02:09:25
回答 1查看 15.6K关注 0票数 5

在我的代码中,我有以下片段:

代码语言:javascript
运行
复制
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。

那是为什么,我该怎么解决?

EN

回答 1

Stack Overflow用户

发布于 2015-10-19 02:22:24

首先,它应该是八进制0777,而不是十六进制0x777,对应的内容如下:

代码语言:javascript
运行
复制
0x777   0111 0111 0111   011 101 110 111   r-xrw-rwx, plus other stuff(a)
0777    111 111 111          111 111 111   rwxrwxrwx

第二,签名是:

代码语言:javascript
运行
复制
int open(const char *pathname, int flags, mode_t mode);

这意味着模式是一个单独的参数,而不是带有标志的or

因此,您要寻找的行是:

代码语言:javascript
运行
复制
int filehandle = open (filename, O_WRONLY | O_CREAT, 0777);

(a)我认为POSIX保留了未指定的上层位,但是Linux会使用它们来表示文件是setgidsticky (虽然不是原始的粘性意义上的代码被缓存在交换空间中-- Linux从来不支持这一点,而是使用粘滞位来限制谁可以对粘性目录中的文件执行某些操作)。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33205558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档