libc库和系统调用
Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义?
libc
1. libc概念
libc是Stantard C Library的简称,它是符合ANSI C标准的一个标准函数库。libc库提供C语言中所使用的宏,类型的定义,字符串操作符,数学计算函数以及输入输出函数等。正如ANSI C是C语言的标准一样,libc只是一个函数库标准,每个操作系统都会按照该标准对标准库进行具体实现。通常我们所说的libc是特指某个操作系统的标准库,比如:在Linux操作系统下所说的libc即glibc。glibc是类Unix操作系统中使用最广泛的libc库,它的全称是GNU C Library.
2. glibc
类Unix操作系统通常将libc库作为操作系统的一部分,它被视为操作系统与用户程序的接口。libc库不仅实现标准C语言中的函数,而且也包含自己所属的函数接口。比如:在glibc库中,既包含标准C中的fopen(),又包含类Unix系统中的open()。在类Unix操作系统中,如果缺失了标准库,那么整个操作系统将不能正常运转。
3. Window下的libc
与类Unix操作系统不同的是,Windows系统并不将libc库作为整个核心操作系统的一部分。通常,每个编译器都附属自己的libc库,这些libc既可以静态编译到程序中,又可以动态编译到程序中。也就是说,应用程序依赖编译器而不是操作系统。
封装函数
在Linux系统中,glibc库中包含许多API,大多数API都对应一个系统调用,比如:应用程序中使用的接口open(),就对应同名的系统调用open()。在glibc库中,通过封装例程(Wrapper Routine)将API和系统调用关联起来。API是头文件中所定义的函数接口,而位于glibc中的封装例程则是对该API对应功能的具体实现。事实上,我们知道接口open()所要完成的功能是通过系统调用open()完成的,因此封装例程要做的工作就是先将接口open()中的参数复制到相应的寄存器中,然后引发一个异常,从而系统进入内核区执行sys_open(),最后当系统调用执行完毕后,封装例程还要将错误码返回到应用程序中。
需要注意的是,函数库中的API和系统调用并没有一一对应的关系。应用程序借助系统调用可以获得内核所提供的服务,但是,像字符串操作这样的函数并不需要借助内核来实现,因此也就不必与某个系统调用关联。
不过,我们并不是必须通过封装例程才能使用系统调用,syscall()和syscallx()两个函数可以直接调用系统调用。具体的使用方法man手册中已经说明的很清楚了。
来自武特的博文:http://edsionte.com/techblog/
libc库和系统调用相关推荐
- linux头文件和库在libc里,libc库和系统调用
Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1. libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准 ...
- linux封装函数,libc库和封装函数 | 求索阁
Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1)libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准的 ...
- Linux-C中libc函数以及系统调用函数查看
目录 man查看类型 基础说明 glibc库函数的范例 系统调用的范例 系统调用查看 查看内核代码的方法 内核中的系统调用函数的查找方法 范例一:socket的系统调用 范例二:kill的系统调用实现 ...
- android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改
[原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 [原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 ...
- Linux的libc库
Linux的libc库 文章目录 Linux的libc库 0x00 libc 0x01 Ubuntu 0x02 CentOS 0x03 下载libc源码 0x00 libc libc是Standard ...
- PWN入门(9)NX enabled,PIE enabled与返回LibC库
简介 "pwn"这个词的源起以及它被广泛地普遍使用的原因,源自于魔兽争霸某段讯息上设计师打字时拼错而造成的,原先的字词应该是"own"这个字,因为 'p' 与 ...
- 泄露libc库、shellcode、__libc_csu_init
pwn 泄露libc write函数输出地址 puts函数输出地址 puts函数输出完地址后没有其他输出 puts函数输出完地址后还有其他输出 注意 shellcode 如何写入shellcode? ...
- linux ARM 如何更新libc库
在进行嵌入是开发的时候,如果碰到 应用程序报告以下错误, 那么说明,你的嵌入式的系统 LIBC库版本过低. 这时候该怎么解决呢? 我再进行live555 开发的过程中就碰到了. 这时候,你可能需要选择 ...
- linux下找不到libc 库,Linux-覆盖libc open()库函数
我在库&中有glibc提供的相同的覆盖open().我首先在库中设置了LD_PRELOAD,因此当进程调用open()时,将调用库中定义的open. 问题:-glibc中还有其他几个函数,一旦 ...
- 爬虫 (三十九) 常用标准库 OS (三十)
长文预警 阅读约5分钟 相信如果你慢慢把这篇文章读完,然后合并实践 经过上述三节,穿插讲了一下HTTP的知识点,以及浏览器的界面资源的获取,以及运行过程,我们可以收获到很多东西,如果没有好好看的伙 ...
最新文章
- GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
- 第六周项目四-静态成员应用
- python opencv2_python opencv2 api
- python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...
- 种树(信息学奥赛一本通-T1423)
- 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架
- MVC中某个页面不需要引用母版页的正确写法
- C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)
- 把一个数组的值赋给另一个数组(VB.NET)
- Humble Numbers(丑数) 超详解!
- 【个人笔记】Vue+ElementUI后台模板配置动态路由
- 图解C#的值类型,引用类型,栈,堆,ref,out
- php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
- UVA1586 Molar Mass(分子量)
- Scratch软件编程等级考试二级——201909
- wordpress企业网站主题仿制02-wordpress企业网站首页的仿制
- storm的容错机制
- (读书笔记) 暗时间 (2016.12.17更)
- 红帽rhel系统 find命令详解
- 哈尔滨市政协就推动大数据产业发展建言献策