在我的linux中,从posix lib或内核调用哪个版本的close()?

bas*_*bie 1 c c++ linux posix

当我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?
Run Code Online (Sandbox Code Playgroud)

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

sep*_*p2k 5

POSIX不是一个库,它是一个标准.手册页的POSIX版本告诉您该函数应该执行的POSIX标准(以及该页面所基于的POSIX版本).如果您只依赖于此页面中描述的行为,那么您的代码应该适用于实现POSIX标准的所有系统(只要它们实现了足够的当前版本).

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

如果您依赖于POSIX未指定的任何行为,则您的代码可能仅适用于Linux系统.