EACCES与EPERM的区别

EACCES与EPERM的区别,c,unix,language-agnostic,posix,errno,C,Unix,Language Agnostic,Posix,Errno,EACCES和EPERM之间到底有什么区别?EPERM被描述为“非超级用户”,但我通常会将其与EACCES联系起来。事实上,我不记得在现实生活中见过EPERM。EACCES几乎总是在系统调用通过当前用户无法访问的路径时使用 EPERM用于其他各种需要成为root用户才能执行操作的情况,例如: kill()在您不拥有的进程上 目录上的链接() reboot() 将Linux图形转换为,以便在执行过程缺少正确的继承/绑定集/环境来设置文件功能时: “如果进程没有获得文件允许的全部功能,那么exec

EACCES和EPERM之间到底有什么区别?EPERM被描述为“非超级用户”,但我通常会将其与EACCES联系起来。事实上,我不记得在现实生活中见过EPERM。

EACCES
几乎总是在系统调用通过当前用户无法访问的路径时使用

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

  • kill()
    在您不拥有的进程上
  • 目录上的链接()
  • reboot()
将Linux图形转换为,以便在执行过程缺少正确的继承/绑定集/环境来设置文件功能时:


“如果进程没有获得文件允许的全部功能,那么execve(2)将失败,错误为EPERM。”

好的,目录上的link()通常也不允许根目录,但如果不是这样,这个答案似乎很好。@BruceFields取决于操作系统。有些允许root用户硬链接目录。(不仅仅是历史上的;macOS积极地将此功能用于备份。)说得好!也许我应该说:“目录上的link()返回EPERM,即使在操作系统上,硬链接甚至不允许根目录”。请注意,
sockets(7)
子系统的重要部分也倾向于返回
EACCES
,而
EPERM
可能更有意义(例如,创建原始套接字、绑定低网络端口等)。我想这是伯克利ism。EPREM的扩展是什么?你能为你提供的报价添加一个来源吗?谢谢这句话是从只是想添加,因为我在这里找到了什么EPERM的代表。