为什么errno 34和代码ENOENT之间不匹配

Pet*_*ons 7 posix node.js

因此,如果我在OS X 10.6.8上的node.js v0.6.7中使用虚假路径运行此简单调用,则会出现错误,如预期的那样.

var fs = require("fs");
fs.stat("/tmp/foo", function(error, stat) {
    return console.log(error);
});
Run Code Online (Sandbox Code Playgroud)

它打印此输出:

{ [Error: ENOENT, no such file or directory '/tmp/foo'] errno: 34, code: 'ENOENT', path: '/tmp/foo' }
Run Code Online (Sandbox Code Playgroud)

我的问题是,根据/usr/include/sys/errno.h我的系统,ENOENT应该有代码2,那么为什么这个错误说errno 34(errno.h中的ERANGE),但是将它与错误消息配对ENOENT

fnl*_*fnl 8

node.js将系统转换errno为内部"errnos"(参见deps/uv/include/uv.huv_translate_sys_error在其中deps/uv/src/unix/error.cdeps/uv/src/win/error.c用于映射),以实现Windows和Unix下的错误条件的通用表示.

34是node.js-errno ENOENT,所以一切都好.

  • 这真的很有帮助,谢谢.但是为什么`要求('常数').在这种情况下ENOENT`报告2?是否有其他方法可以获得Node的errnos? (7认同)