1

我想在 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;
}

谢谢!

编辑:根据 Nikolai 的评论,所有访问权限 = 读写。我不希望每个人都能够写入可执行文件。

4

1 回答 1

2

您可以保证文件创建模式的唯一方法是在调用之前显式清零您的 umask open,因为该mode参数是针对您的 umask 进行与非运算的。

最好在你之后简单地设置你的文件模式creat

于 2012-09-07T18:32:16.360 回答