什么时候打开(2)失败了errno == EMLINK?

时间:2014-06-06 15:13:35

标签: c posix freebsd errno

我遇到了一些代码

int fd = open(fn, flags, 0);
if (fd < 0 && errno != EMLINK)
  ...

flags可以是O_RDONLYO_RDONLY|O_NOFOLLOW

IEEE Std 1003.1,2013(SUSv4)刚刚

  • [EMLINK] 链接太多了。尝试使单个文件的链接数超过{LINK_MAX}。

  • {LINK_MAX} 指向单个文件的最大链接数。

如何打开文件增加其链接数?

2 个答案:

答案 0 :(得分:5)

好问题。添加O_NOFOLLOW后,他们选择重复使用现有的错误代码,而不是重新构建新错误代码。在这种情况下,EMLINK表示该文件是符号链接,并在FreeBSD上返回。 Linux和Darwin返回ELOOP而不是EMLINK,而NetBSD使用EFTYPE

我的联机帮助页说O_NOFOLLOW是随后添加到Linux的FreeBSD扩展(即你不会在旧版本的SUS中找到它的行为,但它包含在带有Linux返回码的POSIX 2008中)

答案 1 :(得分:2)