9

我的 C 程序中的以下行应提供 All/Group/Owner 读写权限

mkfifo("/tmp/dumbPipe", 0666)

但是,一旦我执行了代码并检查了未设置写入位的权限,我最终得到

prw-r--r-- 

所有者是相同的,由于我在 tmp 目录中创建管道,是否有问题?当我从 cmd 行运行 chmod 666 时,所有权限都设置正确。

4

2 回答 2

11

这是一篇没有评论的帖子,只是引用手册。简明扼要等

引用 man 3 mkfifo 的话:

它由进程的umask以通常的方式修改:创建文件的权限为(mode & ~umask)。

引自 man 2 umask

进程 umask 的典型默认值为 S_IWGRP | S_IWOTH(八进制 022)。在通常情况下 open(2) 的 mode 参数被指定为:

      S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH

  (octal 0666) when creating a new file, the permissions on the resulting file will be:

      S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH

  (because 0666 & ~022 = 0644; i.e., rw-r--r--).
于 2009-08-27T19:01:34.443 回答
2

Salam,我知道为时已晚,但是对于其他用户,我选择写此评论即使您将 0666 精确为许可,您也应该知道还有一个称为“进程的文件模式创建”的因素,所以问题是:

如何更改当前进程文件模式创建?

答案:在程序开始时使用 umask(permission) - 并给予 0000 作为权限

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

这应该有帮助。

于 2014-07-17T19:38:12.950 回答