open() 的参数:每个人都应该拥有对文件的所有访问权限,并且应该在创建时被截断

Parameters of open(): Everyone should have all access to file & should be truncated on creation

本文关键字:访问权 权限 创建 访问 参数 每个人 open 文件 拥有      更新时间:2023-10-16

我想在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之后简单地设置文件模式