系统API和系统调用API之间的区别

时间:2013-11-24 07:14:50

标签: linux api system-calls

我已阅读“系统调用API用于用户空间访问和 系统API用于系统空间访问“。我是Linux OS概念的新手,我对System API没有任何了解。有谁可以解释这两者之间的区别?

2 个答案:

答案 0 :(得分:2)

系统调用是通过软件中断对内核的显式请求。这是与操作系统对话的最低级别的事情。系统调用是在您调用内核时。系统调用实际上是非常低级的接口,你可以说你的程序无法独立完成的非常具体的功能。

而System API用于调用系统调用

答案 1 :(得分:1)

首先阅读system calllinux kernel wikipages。

作为Rahul Triparhi answered,系统调用是基本操作,如user-mode应用程序软件所示。使用strace(1)找出某些程序完成的系统调用。

系统调用在man页面的第2部分(在Linux系统的终端中键入第一个man man)中有详细记录。请阅读intro(2),然后阅读syscalls(2)

Stricto sensu,系统调用有一个接口,特别是在ABI规范中指定的,如x86-64 ABI,在最低的机器级别定义 - 就机器指令和寄存器等而言......第2节中的函数是它们上面的微小C包装器。另见Linux Assembly HowTo

请同时阅读Advanced Linux Programming,其中很多都解释了很多。

顺便说一句,我不确定“System API”是否具有明确定义的含义,即使我猜它可能是什么。另请参阅this question的几个答案。

可能“系统API”是指POSIX标准化的许多功能,在POSIX C library中实现,例如GNU libc(但您可以在Linux上使用其他libc ,如MUSL libc,如果你真的想要)。我正在考虑像dlopen(动态加载插件)或getaddrinfo(3)(获取有关网络事物的信息)等功能...... Linux实现(例如dlopen(3))正在提供超级套装。

更一般地说,手册页的第3节,见intro(3),提供了很多库函数(大多数都是在系统调用之上构建的,所以dlopen实际上调用mmap(2)系统调用,getaddrinfo可以使用系统调用连接到某个服务器 - 请参阅nsswitch.conf(5)等...)。但是一些库函数可能没有进行任何系统调用,例如snprintf(3)sqrt(3)longjmp(3) ....(它们只是在进行内部计算而不需要任何额外的内核服务)。