linux中系统调用和库函数的区别 2013-05-03 22:18:20

分类: LINUX

首先,要说一下两者的概念:
系统调用 :是操作系统为用户态运行的进程和硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口,即就是设置在应用程序和硬件设备之间的一个接口层。可以说是操作系统留给用户程序的一个接口。再来说一下,linux内核是单内核,结构紧凑,执行速度快,各个模块之间是直接调用的关系。放眼望整个linux系统,从上到下依次是用户进程->linux内核->硬件。其中系统调用接口是位于Linux内核中的,如果再稍微细分一下的话,整个linux系统从上到下可以是:用户进程->系统调用接口->linux内核子系统->硬件,也就是说Linux内核包括了系统调用接口和内核子系统两部分;或者从下到上可以是:物理硬件->OS内核->OS服务->应用程序,其中操作系统起到“承上启下”的关键作用,向下管理物理硬件,向上为操作系服务和应用程序提供接口,这里的接口就是系统调用了。
       一般地,操作系统为了考虑实现的难度和管理的方便,它只提供一少部分的系统调用,这些系统调用一般都是由C和汇编混合编写实现的 ,其接口用C来定义,而具体的实现则是汇编,这样的好处就是执行效率高,而且,极大的方便了上层调用。

库函数 :顾名思义是把函数放到库里。是把一些常用到的函数编完放到一个文件里,供别人用。别人用的时候把它所在的文件名用#include<>加到里面就可以了。一般是放到lib文件里的。一般是指 编译器 提供的可在c 源程序 中调用的函数。可分为两类,一类是 c语言 标准规定的库函数,一类是 编译器 特定的库函数。 (由于版权原因,库函数的 源代码 一般是不可见的,但在头文件中你可以看到它对外的接口)
      libc中就是一个C标准库,里面存放一些基本函数,这些基本函数都是被标准化了的,而且这些函数通常都是用汇编直接实现的。
       库函数一般可以概括的分为两类,一类是随着操作系统提供的,另一类是由第三方提供的。随着系统提供的这些库函数把系统调用进行封装或者组合,可以实现更多的功能,这样的库函数能够实现一些对内核来说比较复杂的操作。比如,read()函数根据参数,直接就能读文件,而背后隐藏的比如文件在硬盘的哪个磁道,哪个扇区,加载到内存的哪个位置等等这些操作,程序员是不必关心的,这些操作里面自然也包含了系统调用。而对于第三方的库,它其实和系统库一样,只是它直接利 用系统调用的可能性要小一些,而是利用系统提供的API接口来实现功能(API的接口是开放的) 。部分Libc库中的函数的功能的实现还是借助了系统掉调用,比如printf的实现最终还是调用了write这样的系统调用;而另一些则不会使用系统调用,比如strlen, strcat, memcpy等。

实时上,系统调用所提供给用户的是直接而纯粹的高级服务,如果想要更人性化,具有更符合特定情况的功能,那么就要我们用户自己来定义,因此就衍生了库函数,它把部分系统调用包装起来,一方面把系统调用抽象了,一方面方便了用户级的调用。系统调用和库函数在执行的效果上很相似(当然库函数会更符合需求),但是系统调用是运行于内核状态;而库函数由用户调用,运行于用户态。

系统调用是为了方便使用操作系统的接口,而库函数则是为了人们编程的方便 。

linux中系统调用和库函数的区别相关推荐

  1. Linux中线程和进程的区别

    Linux中线程和进程的区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位.例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括 ...

  2. Linux 中su 与su - 的区别

    Linux 中su 与su - 的区别 一.区别 Linux 中切换用户的命令是 su 或 su - . su命令和 su - 命令最大的本质区别就是: 前者只切换了root身份 , 但是shell环 ...

  3. Linux中su与su - 的区别

    Linux中su与su - 的区别 最近在学习任务调度执行,其中我要在轮子组下的一个用户,使用at并重定向,发现没有权限 下面是使用su [root@alytest ~]# su jack [jack ...

  4. Linux中EXT3与EXT4的区别!

    在Linux系统中,日志文件系统分为很多种类型,其中比较典型的是:ext3.ext4.xfs等,那么Linux中EXT3与EXT4的区别有哪些?以下是详细的内容介绍. Linux Kernel自2.6 ...

  5. linux中hda和sda的区别

    linux中hda和sda的区别 hda一般是指IDE接口的硬盘,hda一般指第一块硬盘,类似的有hdb,hdc等 sda一般是指SATA接口的硬盘,sda一般指第一块硬盘,类似的有sdb,sdc等 ...

  6. linux mkdir -m权限,Linux中mkdir和touch命令区别

    一.目的 本文将介绍linux下新建文件或文件夹.删除文件或文件夹命令.         touch能够新建文件,mkdir用来新建文件夹.rm用来删除文件或文件夹.         本文将选取ubu ...

  7. Linux 中 sudo和su的区别

    Linux 中 sudo和su的区别 Linux小知识:sudo su和su的区别 1.内容不同: su命令:用来切换用户,substitute英文含义"代替"的意思. sudo命 ...

  8. linux中fopen和open的区别,Linux下open与fopen的区别

    int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下: O_RDONLY      ...

  9. 系统调用和库函数的区别

    首先,要说一下两者的概念: 系统调用 :是操作系统为用户态运行的进程和硬件设备(如CPU.磁盘.打印机等)进行交互提供的一组接口,即就是设置在应用程序和硬件设备之间的一个接口层.可以说是操作系统留给用 ...

最新文章

  1. 讯飞语音:客户端未被授权
  2. 决策树算法python源代码_决的解释|决的意思|汉典“决”字的基本解释
  3. FZU 2159 WuYou
  4. Centos rescue 模式
  5. 数据结构:插入排序(Insertion sort)
  6. 网络:301和302
  7. 寄售业务的SAP标准流程
  8. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)
  9. php组件是啥,浅谈PHP组件、框架以及Composer
  10. 常见移动机器人轮直径校准
  11. Swagger入参为List
  12. 数学建模安装matlab,数学建模神器——Matlab下载安装教程
  13. Windows登录密码破解
  14. scanf 详解 - 你所不知道的scanf用法
  15. 电信光纤猫虚拟服务器设置方法,电信光纤猫怎么设置宽带拨号?
  16. Smoke Screener or Straight Shooter: Detecting Elite Sybil Attacks in User-Review Social Networks阅读笔记
  17. Node如何处理模块之间的关系
  18. 用Python写了一个图像文字识别OCR工具
  19. 动物实验,如何设置对照?
  20. Online Generation of Collision-Free Trajectories for Quadrotor Flight in Unknown Cluttered Environme

热门文章

  1. VS2017 Intelligense C++ 设置的几个重点
  2. 【转】VS 安全开发生命周期(SDL)检查
  3. SpringBoot+Shiro学习(一):主要模块介绍
  4. Linux系统IO分析工具之iotop常用参数介绍
  5. Python selenium环境搭建
  6. Alfred+AppleScript实现快速复制当前文件夹路径
  7. 最长上升子序列问题 (LIS)
  8. 聊一聊Python的变量类型判断type和isinstance
  9. 论文阅读: Direct Monocular Odometry Using Points and Lines
  10. CentOS 7.6 64位安装docker并设置开机启动