系统调用和库函数

一、系统调用下图我们可以看到用户和操作系统的关系: (1)什么是系统调用系统调用就是内核的一种出口,它是操作系统提供给用户程序调用的一组”特殊“的接口。逻辑上系统调用可以被看作一个内核与用户空间程序的接口。它的执行流程就是,把用户进程的请求传递给内核,待内核处理完毕后将处理结果返回给用户空间。(陷入进内核态0x80) (2)系统调用和API系统调用和API很多人会理...
摘要由CSDN通过智能技术生成

一、系统调用

下图我们可以看到用户和操作系统的关系:
这里写图片描述

(1)什么是系统调用

系统调用就是内核的一种出口,它是操作系统提供给用户程序调用的一组”特殊“的接口。逻辑上系统调用可以被看作一个内核与用户空间程序的接口。

它的执行流程就是,把用户进程的请求传递给内核,待内核处理完毕后将处理结果返回给用户空间。

(陷入进内核态0x80)
这里写图片描述

(2)系统调用和API

系统调用和API很多人会理解错误,我们通过上面的描述知道了什么是系统调用,那么API是什么呢?

API(Application Programming Interface):应用程序接口,是一些预先定义的函数,跟内核没有必然的联系。它提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码或者了解具体实现细节。

Linux的API遵循POSIX标准。我们应用程序来编程的时候是通过操作系统提供的应用编程接口(API)而不是直接通过系统调用来编程的。有的时候API和系统调用形式是一样的。

下图我们可以看到系统调用和API的关系。中间的全部是API,内核态都是系统调用,我们可以发现有的API并没有调用系统调用,而有的API调用了系统调用。
这里写图片描述

区别: api是函数的定义,规定了这个函数的功能,跟内核无直接关系。而系统调用是通过中断向内核发请求,实现内核提供的某些服务。

联系: 一个api可能会需要一个或多个系统调用来完成特定功能。通俗点说就是如果这个api需要跟内核打交道就需要系统调用,否则不需要。
程序员调用的是API(API函数),然后通过与系统调用共同完成函数的功能。

因此,API是一个提供给应用程序的接口,一组函数,是与程序员进行直接交互的。

系统调用则不与程序员进行交互的,它根据API函数,通过一个软中断机制向内核提交请求,以获取内核服务的接口。

并不是所有的API函数都一一对应一个系统调用,有时,一个API函数会需要几个系统调用来共同完成函数的功能,甚至还有一些API函数不需要调用相应的系统调用(因此它所完成的不是内核提供的服务)

(3)系统调用和系统命令

系统命令和系统调用又是什么样的关系呢?

系统命令相对于应用编程接口是更高的一层,每一个系统调用都可以看作一个可执行程序,例如ls、hostname等命令,它相当于封装和调用了系统调用,我们可以通过strace命令查看某个命令调用的系统调用,下面是ls命令调用的系统调用(很长,所以没有列举完毕):
关于strace 命令我们可以查看下面这篇文章:http://man.linuxde.net/strace

lyf@ubuntu:~/code/my_gi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值