为什么ENOENT意味着"没有这样的文件或目录"?

min*_*yan 448 c unix linux

什么是"耳鼻喉科"的缩写?

ENT:

没有相应的文件和目录

应该只用"ENOFILE"命名.

有什么故事或理由吗?

Som*_*ude 707

它是Error NO ENTry(或Error NO ENTity)的缩写,实际上可以用于多个文件/目录.

  • @BradyDowling因为C编译器在时间的早期不支持符号中超过8个字符. (53认同)
  • "实际上可以用于多个文件/目录." - 除非您希望将代码合并到Linux中:https://lkml.org/lkml/2012/12/23/75 (20认同)
  • @ Someprogrammerdude的评论解释了我关于C命名约定的大部分问题(疑问). (13认同)
  • 看起来如果错误是明确的而不是保存8个字符的空间对用户更有价值.知道为什么会这样吗? (9认同)
  • @GuidoFlohr:不,“bind()”将套接字绑定到地址。对于“AF_ALG”套接字,地址(“sockaddr_alg”)指定算法类型和名称,对于未知的算法名称返回“ENOENT”。这些算法名称不涉及文件。 (4认同)
  • 这个答案声称它可以"用于更多."具体是什么? (2认同)
  • @Jackson,例如节点的[child_process]中的`command not found`(https://nodejs.org/docs/latest-v10.x/api/child_process.html).\*哭\*. (2认同)
  • @Jackson:如果您尝试绑定不存在的算法,`AF_ALG`套接字将从`bind()`返回`ENOENT`。 (2认同)
  • @caf:好的,明白了。但它是 Linux 特定的,可以说“ENOENT”对于这种特殊情况来说是错误的错误代码,正是因为它与目录条目无关,并且可能会导致令人困惑的错误消息。 (2认同)

Rol*_*lig 118

它只是"没有这样的目录条目".由于目录条目可以是目录或文件(或符号链接,或套接字,或管道或设备),因此名称ENOFILE的含义过于狭窄.

  • 符号链接,套接字,管道和设备都是文件,目录也是如此.ENOFILE的含义与ENOENT一样宽或窄. (22认同)
  • 无论如何,可以肯定地说“ent”在“ENOENT”中与在“struct dirent”中代表相同的东西。 (7认同)

Dro*_*ror 9

有关所有代码的完整列表以及每个代码含义的更好描述,请参阅errno.h 这是一个包含文件,是 C 标准库的一部分,注释阐明了错误的含义。在这种情况下:

#define ENOENT 2 /* 没有这样的文件或目录 */

  • 叹。这是另一个链接 https://www.ibm.com/docs/en/zos/2.3.0?topic=files-errnoh-symbolic-constants-errno。如果帽子坏了,这应该总是有效 https://duckduckgo.com/?t=ffsb&q=errno.h&ia=web :-) (5认同)
  • 链接已损坏 - 现在需要身份验证 (4认同)