open() 的参数:每个人都应该拥有对文件的所有访问权限,并且应该在创建时被截断
Parameters of open(): Everyone should have all access to file & should be truncated on creation
我想在Unix中创建一个允许所有人访问的文件。如果该文件已经存在,则应将其截断为空。
看完打开的手册页后,我接到了以下电话。只是想确认这是否是正确的做法。
int fd;
int flags = O_RDWR | O_CREAT | O_TRUNC;
/* Set umask to Octal 011 */
mode_t mode = S_IXGRP | S_IXOTH;
/* umask syscall alwasy succeeds. No need to save return value (previous umask value) */
umask(mode);
/* Set mode to Octal 666. open syscall will and mode with ~umask.
0666 & ~0011 = 0666 i.e. the mode we want to set.
*/
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
if ((fd = open(path.c_str(), flags, mode)) < 0) {
return false;
} else {
close(fd);
return true;
}
谢谢!
编辑:根据尼古拉的评论,所有访问=阅读&写我不希望每个人都能写入可执行文件。
保证文件创建模式的唯一方法是在调用open
之前显式清零umask,因为mode
参数是针对umask的NANDed。
最好在您creat
之后简单地设置文件模式。
相关文章:
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 为什么我在空指针错误(链表)中获取成员访问权限
- 为什么"delete"操作员给我访问权限冲突
- 从根权限进程创建可访问的文件
- 父级的子属性 - 访问权限
- 从C++获得对在python中创建的C++类的访问权限
- 威纳派读取自定义文件或文件夹的所有访问权限
- 授予另一个类对特定方法的访问权限
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 正确的友元定义,以授予 std::map 对私有默认构造函数的访问权限
- TOCTTOU - 在处理文件之前使用访问权限
- 如何通过指针仅向结构的某些成员提供可变访问权限
- main() 对连续运行的线程中的编辑值具有只读访问权限 - C++
- 如何使用 c++ 创建对"everyone"具有共享访问权限的文件夹
- 嵌套类嵌套类的访问权限
- 为什么继承的受保护操作员=()有公共访问权限
- Lambda 函数,用于调用有权访问类成员的成员函数
- 为什么拥有不同访问控制权限的成员的工会不是标准布局
- 获取从基类指针到具有不同类型的两个派生成员变量的访问权
- 拒绝访问nt权限本地服务