mkfifo文件权限未正确执行

时间:2009-08-27 18:57:53

标签: c unix permissions named-pipes

我的C程序中的以下行应提供所有/组/所有者读写权限

mkfifo("/tmp/dumbPipe", 0666)

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

prw-r--r-- 

所有者是一样的,这是一个问题,因为我在tmp目录中创建管道?当我从cmd行运行chmod 666时,所有权限都被正确设置。

2 个答案:

答案 0 :(得分:9)

这是一篇没有评论的帖子,只是引用手册。 Brievity等。

引自男人3 mkfifo:

  

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

引自man 2 umask

  

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

      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--).

答案 1 :(得分:0)

萨拉姆, 我知道这是为时已晚,但对于其他用户,我选择撰写此评论 即使您将0666作为权限进行精确处理,您也应该知道还有一个被称为“进程文件模式创建”的因素,所以问题是:

如何更改当前的流程文件模式?

答案:在程序开头使用umask(权限) - 并授予0000权限

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

这应该有所帮助。