в разрешении файла указан бит 'l' (--- x - l ---) O / P - PullRequest
1 голос
/ 22 февраля 2012

Иногда я получаю бит в разрешении файла, но не регулярно, когда я создаю файл с 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 ]

2 голосов
/ 22 февраля 2012

Вы пропустили обязательный третий параметр open (), который является mode.(Параметр обязателен при использовании O_CREAT).Поскольку в стеке нет параметров, open использует случайное значение (т. Е. Адрес возврата в стеке).

1 голос
/ 24 февраля 2012

artensay - Нет.

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

Операционная система работала с принудительной блокировкой, очень неправильно.Возможно, вы не читали другие его посты.Однако этот бит был установлен из вспомогательного вызова, такого как оператор fcntl (), а не из стека мусора.И да, вы правы, открытое утверждение было неверным.

...