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 文件权限未正确执行的主要内容,如果未能解决你的问题,请参考以下文章

使用 open 系统调用未正确设置文件权限

Rsync 未正确设置 Windows 文件夹的权限

UNIX文件夹中设置的权限未正确传输到NFS共享

got未写入软件包数据

Bash 脚本未在 Cron 中正确执行

未请求推送通知权限