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库和系统调用相关推荐

  1. linux头文件和库在libc里,libc库和系统调用

    Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1. libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准 ...

  2. linux封装函数,libc库和封装函数 | 求索阁

    Linux系统调用这部分经常出现两个词:libc库和封装函数,不知道你是否清楚它们的含义? libc 1)libc概念 libc是Stantard C Library的简称,它是符合ANSI C标准的 ...

  3. Linux-C中libc函数以及系统调用函数查看

    目录 man查看类型 基础说明 glibc库函数的范例 系统调用的范例 系统调用查看 查看内核代码的方法 内核中的系统调用函数的查找方法 范例一:socket的系统调用 范例二:kill的系统调用实现 ...

  4. android盒子开发招聘,[原创]Android沙盒开发之系统libc库定制修改

    [原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 [原创]Android沙盒开发之系统libc库定制修改 2013-7-29 22:29 11525 ...

  5. Linux的libc库

    Linux的libc库 文章目录 Linux的libc库 0x00 libc 0x01 Ubuntu 0x02 CentOS 0x03 下载libc源码 0x00 libc libc是Standard ...

  6. PWN入门(9)NX enabled,PIE enabled与返回LibC库

    简介 "pwn"这个词的源起以及它被广泛地普遍使用的原因,源自于魔兽争霸某段讯息上设计师打字时拼错而造成的,原先的字词应该是"own"这个字,因为 'p' 与 ...

  7. 泄露libc库、shellcode、__libc_csu_init

    pwn 泄露libc write函数输出地址 puts函数输出地址 puts函数输出完地址后没有其他输出 puts函数输出完地址后还有其他输出 注意 shellcode 如何写入shellcode? ...

  8. linux ARM 如何更新libc库

    在进行嵌入是开发的时候,如果碰到 应用程序报告以下错误, 那么说明,你的嵌入式的系统 LIBC库版本过低. 这时候该怎么解决呢? 我再进行live555 开发的过程中就碰到了. 这时候,你可能需要选择 ...

  9. linux下找不到libc 库,Linux-覆盖libc open()库函数

    我在库&中有glibc提供的相同的覆盖open().我首先在库中设置了LD_PRELOAD,因此当进程调用open()时,将调用库中定义的open. 问题:-glibc中还有其他几个函数,一旦 ...

  10. 爬虫 (三十九) 常用标准库 OS (三十)

    长文预警  阅读约5分钟  相信如果你慢慢把这篇文章读完,然后合并实践 经过上述三节,穿插讲了一下HTTP的知识点,以及浏览器的界面资源的获取,以及运行过程,我们可以收获到很多东西,如果没有好好看的伙 ...

最新文章

  1. GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
  2. 第六周项目四-静态成员应用
  3. python opencv2_python opencv2 api
  4. python的变量名有哪些_【python字符串做变量名的方法有哪些?这些方法对python应用很重要】- 环球网校...
  5. 种树(信息学奥赛一本通-T1423)
  6. 还是有点香!苹果官翻2018款iPad Pro及MacBook Air上架
  7. MVC中某个页面不需要引用母版页的正确写法
  8. C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)
  9. 把一个数组的值赋给另一个数组(VB.NET)
  10. Humble Numbers(丑数) 超详解!
  11. 【个人笔记】Vue+ElementUI后台模板配置动态路由
  12. 图解C#的值类型,引用类型,栈,堆,ref,out
  13. php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
  14. UVA1586 Molar Mass(分子量)
  15. Scratch软件编程等级考试二级——201909
  16. wordpress企业网站主题仿制02-wordpress企业网站首页的仿制
  17. storm的容错机制
  18. (读书笔记) 暗时间 (2016.12.17更)
  19. 红帽rhel系统 find命令详解
  20. 哈尔滨市政协就推动大数据产业发展建言献策

热门文章

  1. 使用Visual Studio进行单元测试-Part4
  2. window Jconsole链接到CenOS 监控Tomcat
  3. Oracle 动态视图3 V$SESSION
  4. 提问的智慧 - How To Ask Questions The Smart Way
  5. 云计算最有利于中小企业
  6. 国网四川电力应用大数据服务经济社会发展
  7. vue的自定义指令的坑
  8. Android版-支付宝APP支付
  9. Linux/Unix shell 监控Oracle实例(monitor instance)
  10. 项目管理(二)责任划分