Разница между 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".

Другие вопросы по тегам