Разница между EACCES и EPERM
В чем разница между EACCES и EPERM? EPERM описывается здесь как "не суперпользователь", но я обычно ассоциирую это с EACCES. На самом деле, я не могу вспомнить, чтобы когда-либо видел EPERM в реальной жизни.
3 ответа
EACCES
почти всегда используется, когда системному вызову был передан путь, который был недоступен текущему пользователю.
EPERM
используется в различных других ситуациях, когда вам нужно быть пользователем root для выполнения действия, например
kill()
на процесс, который вам не принадлежитlink()
в каталогеreboot()
По словам программистов Linux, узнайте разницу между EACCES и EPERM уже! - Случайный Dev's Rants...
EACCES
"Отказано в доступе" означает, что у пользователя недостаточно прав для выполнения действия. Пользователь root или другой пользователь с достаточными полномочиями пользователя / группы должен иметь возможность выполнить действие.EPERM
"Операция не разрешена" должна использоваться, чтобы означать, что действие невозможно или вообще не безопасно, независимо от того, является ли пользователь root или нет. Примеры будут:chmod
Создание файла в файловой системе FAT (файловая система не поддерживает биты прав доступа)
- Обратите внимание, что большая часть кода Linux возвращается
EPERM
когда это действительно должно вернутьсяEACCES
,
Linux capabilities(7)
фигурировать в execve(2)
так что если в процессе exec'ing отсутствует правильное наследование /bounding-set/ambient для установки возможностей файла:
"Если процесс не получил полный набор разрешенных возможностей файла, то execve(2) завершится с ошибкой EPERM".