联机帮助页中有多个部分.其中两个是:
2 Unix and C system calls 3 C Library routines for C programs
例如,有getmntinfo(3)
和getfsstat(2)
,看起来他们做同样的事情.什么时候应该使用哪个和有什么区别?
系统调用是操作系统函数,就像在UNIX上一样,该malloc()
函数建立在sbrk()
系统调用之上(用于调整进程内存空间的大小).
库只是不属于操作系统的应用程序代码,通常可以在多个操作系统上使用.它们与您自己程序中的函数调用基本相同.
该行可能有点模糊,但只是将系统调用视为内核级功能.
系统调用是用户级代码和内核之间的接口.C库例程就像其他任何库调用一样,它们恰好是真正普遍提供的(非常普遍).许多标准库例程是围绕系统调用的包装器(薄或其他),这确实会使线条模糊一些.
至于使用哪一个,作为一般规则,使用最适合您需要的那个.
常用功能库建立在系统调用接口之上,但应用程序可以自由使用.
系统调用就像身份验证密钥,可以访问内核资源.
上图来自高级Linux编程,有助于了解用户应用程序如何与内核交互.
本手册第2节中描述的调用都是围绕实际调用陷阱到内核的系统服务的相对较薄的包装器.本手册第3节中描述的C标准库例程是客户端库函数,可能会也可能不会实际使用系统调用.
这篇文章描述了系统调用和对内核的捕获(在稍微不同的上下文中),并解释了系统调用背后的基本机制.