我的C程序中以下这行应该提供所有人/组/拥有者的读写权限。
mkfifo("/tmp/dumbPipe", 0666)
但是,一旦我执行代码并检查权限,发现没有设置“写入”位,最终结果如下:
prw-r--r--
所有者是相同的,由于我在tmp目录中创建管道,这会成为问题吗?当我在命令行运行chmod 666时,所有权限都被正确设置。
我的C程序中以下这行应该提供所有人/组/拥有者的读写权限。
mkfifo("/tmp/dumbPipe", 0666)
但是,一旦我执行代码并检查权限,发现没有设置“写入”位,最终结果如下:
prw-r--r--
所有者是相同的,由于我在tmp目录中创建管道,这会成为问题吗?当我在命令行运行chmod 666时,所有权限都被正确设置。
这是一篇没有评论的文章,只引用手册。简洁明了。
来自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--).
如何更改当前进程的文件模式创建?
答案:在程序开头使用umask(permission)-并给0000作为权限。
http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html
这应该会有所帮助。