【问题标题】:'l' bit in in file permission ( ---x--l--- )O/P'l' 位在文件权限 ( ---x---l--- )O/P
【发布时间】:2012-02-22 09:47:30
【问题描述】:

我有时会获得一些文件权限,但不是经常性地当我创建时 文件与int fd = open("\tmp\lockfile", O_CREAT | O_EXCL);。我得到的 O/P 很少见 场景当我做ll \tmp\locfile

root@cool> ll lockfile
---x--l---   1 root     nms            0 Feb 21 10:40 lockfile
root@cool>`

虽然大多数时候 O/P 是这样的:-

root@cool> ll importer.lck
----------   1 user  nms            0 Feb 22 10:58 importer.lck`

我知道通过 O_CREAT 创建文件虽然不提供模式可能是一个问题 以上可能是个问题。在这种情况下:-

root@cool> ll lockfile
---x--l---   1 root     nms            0 Feb 21 10:40 lockfile
root@cool>

一旦创建此文件的进程结束,我将无法删除锁定文件。 chmod 在上述情况下也不起作用,但 chown 似乎起作用。

如何防止创建具有这些权限---x--l--- 的文件只是通过传递模式?掩码集是:-

root@cesme:/tmp# umask
0022
root@cesme:/tmp#`

【问题讨论】:

    标签: c++ unix solaris


    【解决方案1】:

    您省略了 open() 所需的第三个参数,即模式。 (使用 O_CREAT 时需要该参数)。由于栈上没有参数,所以 open 使用一个随机值(即栈上的返回地址)。

    【讨论】:

      【解决方案2】:

      artensay - 没有。

      http://www.tereknor.com/solaris/solfaq/faq174.html
      

      OP 搞砸了强制锁定,非常错误。你可能没有读过他的其他帖子。然而,该位被设置为来自诸如 fcntl() 语句之类的辅助调用,而不是堆栈垃圾。是的,你是对的,open 语句是错误的。

      【讨论】:

      • artensay 提到它从堆栈中获取它可能是错误的,但我想根本原因是使用 O_CREAT 创建文件的方式,我相信专门提供一种模式可以防止这种情况发生。你说什么?
      猜你喜欢
      • 2020-01-22
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 2012-05-06
      • 2017-06-01
      相关资源
      最近更新 更多