'l'位于文件权限(--- x - l ---)O / P中

时间:2012-02-22 09:47:31

标签: c++ unix solaris

我有时会获得文件许可,但是当我创建时,我不会定期获得 文件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#`

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

artensay - 没有。

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

OP正在搞乱强制锁定,非常不正确。你可能没有看过他的其他帖子。然而,这个位设置它来自一个辅助调用,如fcntl()语句,而不是堆栈垃圾。是的,你是对的,公开声明是错误的。