我的C程序中的以下行应提供所有/组/所有者读写权限
mkfifo("/tmp/dumbPipe", 0666)
但是一旦我执行了代码并检查了写入位的权限,我最终得到了
prw-r--r--
所有者是一样的,这是一个问题,因为我在tmp目录中创建管道?当我从cmd行运行chmod 666时,所有权限都被正确设置。
答案 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
这应该有所帮助。