在我的Linux中调用了哪个版本的close(),来自posix lib或内核

which version of close() is called in my linux,from posix lib or kernel?

本文关键字:来自 posix 内核 lib close Linux 我的 调用 版本      更新时间:2023-10-16

当我man -a close时,第一页是POSIX手册页,然后我有一个close(2),(2表示系统api或内核功能)。这意味着至少有 2 个版本的 close() .

例如,像这样的代码段:

int fd = open("xxx");
........
close(fd);   -----here, which version is called,
                  is that one from the POSIX lib, or the raw system API?

PS:因此,我的linux系统包含用于大多数系统API调用的POSIX包装器,如何辨别我的代码是在调用POSIX lib还是原始系统API?

POSIX不是一个库,它是一个标准。手册页的 POSIX 版本告诉您 POSIX 标准规定该功能应该做什么(以及该页面基于哪个版本的 POSIX)。如果您只依赖于本页中描述的行为,则您的代码应该适用于所有实现 POSIX 标准的系统(只要它们实现足够当前的版本)。

手册页的 Linux 版本会告诉您该函数在您的系统上的实际作用。在绝大多数情况下,此处描述的行为将是 POSIX 页面中描述的行为的超集,即 Linux 行为将遵循 POSIX 标准,但它也可能定义 POSIX 未定义的情况,或者函数可能接受 POSIX 未强制要求的其他选项。

如果您依赖于 POSIX 未指定的任何行为,您的代码可能只能在 Linux 系统上工作。

"这意味着至少有 2 个版本的 close()。"

不。这意味着有 2 个版本的文档需要关闭。