jus*_*ody 6 c posix freebsd errno
我偶然发现了一些代码
int fd = open(fn, flags, 0);
if (fd < 0 && errno != EMLINK)
...
Run Code Online (Sandbox Code Playgroud)
flags是O_RDONLY或者O_RDONLY|O_NOFOLLOW
IEEE Std 1003.1,2013(SUSv4)刚刚发布
[EMLINK]链接太多.尝试使单个文件的链接数超过{LINK_MAX}.
{LINK_MAX}指向单个文件的最大链接数.
如何打开文件增加其链接数?
好问题.当O_NOFOLLOW加入,他们选择了重用现有的错误代码,而不是组成一个新的.EMLINK在这种情况下表示该文件是符号链接并在FreeBSD上返回.当NetBSD使用时,Linux和Darwin返回ELOOP而不是.EMLINKEFTYPE
我的联机帮助页说O_NOFOLLOW是随后添加到Linux的FreeBSD扩展(即你不会在旧版本的SUS中找到它的行为,但它包含在带有Linux返回码的POSIX 2008中).