mkfifo 文件权限未正确执行
Posted
技术标签:
【中文标题】mkfifo 文件权限未正确执行【英文标题】:mkfifo file permissions not being executed correctly 【发布时间】:2009-08-27 18:57:52 【问题描述】:我的 C 程序中的以下行应该提供 All/Group/Owner 读写权限
mkfifo("/tmp/dumbPipe", 0666)
但是一旦我执行了代码并检查了没有设置写入位的权限,我最终得到了
prw-r--r--
所有者都是一样的,因为我在tmp目录中创建管道,所以有问题吗?当我从 cmd 行运行 chmod 666 时,所有权限都设置正确。
【问题讨论】:
【参考方案1】:这是一篇没有 cmets 的帖子,只是引用手册。简洁等。
引自 man 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--).
【讨论】:
【参考方案2】:萨拉姆, 我知道为时已晚,但对于其他用户,我选择写此评论 即使您将 0666 精确为权限,您也应该知道还有一个因素称为“进程的文件模式创建”,所以问题是:
如何改变当前的进程文件模式创建?
答案:在程序开始时使用 umask(permission) - 并给予 0000 作为权限
http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html
这应该会有所帮助。
【讨论】:
以上是关于mkfifo 文件权限未正确执行的主要内容,如果未能解决你的问题,请参考以下文章