我的 C 程序中的以下行应提供 All/Group/Owner 读写权限
mkfifo("/tmp/dumbPipe", 0666)
但是,一旦我执行了代码并检查了未设置写入位的权限,我最终得到
prw-r--r--
所有者是相同的,由于我在 tmp 目录中创建管道,是否有问题?当我从 cmd 行运行 chmod 666 时,所有权限都设置正确。
我的 C 程序中的以下行应提供 All/Group/Owner 读写权限
mkfifo("/tmp/dumbPipe", 0666)
但是,一旦我执行了代码并检查了未设置写入位的权限,我最终得到
prw-r--r--
所有者是相同的,由于我在 tmp 目录中创建管道,是否有问题?当我从 cmd 行运行 chmod 666 时,所有权限都设置正确。
这是一篇没有评论的帖子,只是引用手册。简明扼要等
引用 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--).
Salam,我知道为时已晚,但是对于其他用户,我选择写此评论即使您将 0666 精确为许可,您也应该知道还有一个称为“进程的文件模式创建”的因素,所以问题是:
如何更改当前进程文件模式创建?
答案:在程序开始时使用 umask(permission) - 并给予 0000 作为权限
http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html
这应该有帮助。