我遇到了一些代码
int fd = open(fn, flags, 0);
if (fd < 0 && errno != EMLINK)
...
flags
可以是O_RDONLY
或O_RDONLY|O_NOFOLLOW
IEEE Std 1003.1,2013(SUSv4)刚刚
[EMLINK] 链接太多了。尝试使单个文件的链接数超过{LINK_MAX}。
{LINK_MAX} 指向单个文件的最大链接数。
如何打开文件增加其链接数?
答案 0 :(得分:5)
好问题。添加O_NOFOLLOW
后,他们选择重复使用现有的错误代码,而不是重新构建新错误代码。在这种情况下,EMLINK
表示该文件是符号链接,并在FreeBSD上返回。 Linux和Darwin返回ELOOP
而不是EMLINK
,而NetBSD使用EFTYPE
。
我的联机帮助页说O_NOFOLLOW
是随后添加到Linux的FreeBSD扩展(即你不会在旧版本的SUS中找到它的行为,但它包含在带有Linux返回码的POSIX 2008中)
答案 1 :(得分:2)