API/POSIX/C库的区别与联系
一般情况下,应用程序通过应用编程接口(API)而不是直接通过系统调用来编程。这点很重要,因为应用程序使用的这种编程接口实际上并不需要和内核提供的系统调用一一对应。
一个API定义了一组应用程序使用的编程接口。它们可以实现成一个系统调用,也可以通过调用多个系统调用来实现,而完全不使用任何系统调用也不存在问题。实际上,API可以在各种不同的操作系统上实现,给应用程序提供完全相同的接口,而它们本身在这些系统上的实现却可能迥异。
在Unix世界中,最流行的应用编程接口是基于POSIX标准的,其目标是提供一套大体上基于Unix的可移植操作系统标准。POSIX是说明API和系统调用之间关系的一个极好例子。在大多数Unix系统上,根据POSIX而定义的API函数和系统调用之间有着直接关系。
Linux的系统调用像大多数Unix系统一样,作为C库的一部分提供如下图所示。C库实现了 Unix系统的主要API,包括标准C库函数和系统调用。所有的C程序都可以使用C库,而由于C语言本身的特点,其他语言也可以很方便地把它们封装起来使用。
从程序员的角度看,系统调用无关紧要,他们只需要跟API打交道就可以了。相反,内核只跟系统调用打交道;库函数及应用程序是怎么使用系统调用不是内核所关心的。
关于Unix的界面设计有一句通用的格言“提供机制而不是策略”。换句话说,Unix的系统调用抽象出了用于完成某种确定目的的函数。至干这些函数怎么用完全不需要内核去关心。区别对待机制(mechanism)和策略(policy)是Unix设计中的一大亮点。大部分的编程问题都可以被切割成两个部分:“需要提供什么功能”(机制)和“怎样实现这些功能”(策略)。
API/POSIX/C库的区别与联系相关推荐
- 标准C函数库头文件、POSIX标准库头文件和Windows API函数库头文件说明
1. 标准C函数库头文件 名字 源自 描述 <assert.h> 包含断言宏,被用来在程序的调试版本中帮助检测逻辑错误以及其他类型的bug. <complex.h> C99 一 ...
- 动态链接库和静态库的区别
动态链接库.静态库.import库区别 动态链接库(Dynamic Linked Library): Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中.其中有3个最 ...
- Android工程中三种库的区别:Private Libraries、Referenced Libraries、Dependency Libraries
转自:https://blog.csdn.net/mybook1122/article/details/46554933 一.v4.v7.v13的作用和用法 1.Android Support V4, ...
- C++静态库与动态库的区别?
C++静态库与动态库 这次分享的宗旨是--让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- STM32中HAL库与标准库的区别
这是扒的某网站上大佬们的见解. 1.HAL库就是封装的比较猛,移植性比较强,标准库就是将寄存器封装好,移植性没有HAL好. 2.HAL库可以用ST的软件CUBE生成初始化工程.3.HAL库最方便的就是 ...
- linux thread model . Linux上posix线程库实现原理讨论
http://blog.csdn.net/fanbird2008/article/details/6752853 Linux上posix线程库实现原理讨论 说明一下,这个问题困扰我好长时间,因为正如使 ...
- maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令
maven发布项目到私服-snapshot快照库和release发布库的区别和作用及maven常用命令 在日常的工作中由于各种原因,会出现这样一种情况,某些项目并没有打包至mvnrepository. ...
- C/C++ 静态库和动态库的区别
可执行目标文件 可重定位目标文件 共享目标文件 静态库和动态库的区别: 生效阶段不同,静态库是在编译阶段就会把其链接到可执行目标文件中:动态库是在程序运行过程中指定路径或者系统动态库路径下寻找. -l ...
- 什么是Vue.js?||为什么要学习流行框架||框架和库的区别?||MVC和MVVM的关系图解
什么是Vue.js? Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于W ...
最新文章
- 云计算开发要学习哪些东西?云计算开发的内容
- Linux 安装图形界面及远程连接
- print (“{0:<10}{1:>5}“.format(word, count))
- java date传输类型错误_转换日期格式:Java中的转换错误?
- linux中错误总结归纳
- mysql怎么插入10w测试数据_mysql快速插入100万测试数据
- 原创:Spring整合junit测试框架(简易教程 基于myeclipse,不需要麻烦的导包)
- thinkphp 框架自动加载原理_这下你应该理解ThinkPHP的Loader自动加载了
- C++判断进程id是否存在
- 一个模型搞定多个CTR业务!阿里STAR网络介绍(附代码实现)
- 如何配置Mybatis?(详解)
- 查看和修改MySQL数据库表存储引擎
- linux脚本自动 输入命令,Linux脚本自动输入密码
- 《算法竞赛入门经典》————竖式问题
- VS2015彻底卸载干净
- android8 fat分区,MTK 6577+Android EMMC分区布局
- 引入jq库,却不起效,底线解决方法
- 微信群骂人违法吗?怎么维权
- 主域控崩溃后,备域如何快速接管主域控制器
- Windows Server 2008 R2 桌面化
热门文章
- python IDLE添加行号显示
- 类的静态成员函数带来了什么好处,应该在什么时候使用?
- android listview 不重绘,重绘listview
- RabbitMQ-AMQP术语介绍
- C语言实现对图片的base64编解码
- ubuntu 自动挂载工具_Ubuntu自动挂载分区
- macmini java,尽管在macBookPro上编译和运行完美,但Mac mini上的桥头问题编译项目仍然存在...
- vs设置编码格式_轻松编辑PDF文档的贝茨编码
- ros openwrt 分流_常平:推进“截污大会战”补贴助力企业雨污分流
- python机械臂怎么控制_Python编程语言趣味学,EV3工业机械臂上线