【问题标题】:mkfifo file permissions not being executed correctlymkfifo 文件权限未正确执行
【发布时间】:2009-08-27 18:57:52
【问题描述】:

我的 C 程序中的以下行应该提供 All/Group/Owner 读写权限

mkfifo("/tmp/dumbPipe", 0666)

但是一旦我执行了代码并检查了没有设置写入位的权限,我最终得到了

prw-r--r-- 

所有者都是一样的,因为我在tmp目录中创建管道,所以有问题吗?当我从 cmd 行运行 chmod 666 时,所有权限都设置正确。

【问题讨论】:

    标签: c unix permissions named-pipes


    【解决方案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

      这应该会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 2016-02-06
        • 2013-05-19
        相关资源
        最近更新 更多