EACCES 和 EPERM 之间的区别

Difference between EACCES and EPERM

EACCES和EPERM到底有什么区别? EPERM 被描述为 here 为 "not super user",但我通常会将其与 EACCES 联系起来。事实上,我不记得在现实生活中见过 EPERM。

EACCES几乎总是在系统调用传递给当前用户无法访问的路径时使用。

EPERM 用于需要成为 root 用户才能执行操作的各种其他情况,例如

  • kill() 在您不拥有的进程上
  • link() 在目录上
  • reboot()

Linux capabilities(7) figure into execve(2) 这样如果执行过程缺少正确的 inheritance/bounding-set/ambient 来设置文件功能:

"If the process did not obtain the full set of file permitted capabilities, then execve(2) fails with the error EPERM."