mkfifo文件权限未被正确执行

11

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

mkfifo("/tmp/dumbPipe", 0666)

但是,一旦我执行代码并检查权限,发现没有设置“写入”位,最终结果如下:

prw-r--r-- 

所有者是相同的,由于我在tmp目录中创建管道,这会成为问题吗?当我在命令行运行chmod 666时,所有权限都被正确设置。

2个回答

12

这是一篇没有评论的文章,只引用手册。简洁明了。

来自mkfifo命令的man 3引用:

它通常按照进程的umask进行修改:创建文件的权限为(mode & ~umask)。

来自umask命令的man 2引用:

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

4
您好,我知道现在有点晚了,但是对于其他用户,我选择写下这个评论。 即使您明确指定0666作为权限,您也应该知道还有另一个因素,称为“进程文件模式创建”,因此问题是:

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

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

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

这应该会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接