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手册中已经说明的很清楚了。

linux封装函数,libc库和封装函数 | 求索阁相关推荐

  1. python+find_all函数_BeautifulSoup库之find_all函数

    BeautifulSoup将复杂的HTML文档转换成一个复杂的树形结构.每个节点都是Python对象.所有对象可以归纳为四种:Tag , NavigableString , BeautifulSoup ...

  2. c语言 offsetof函数,C 库宏 - offsetof()函数

    宏offsetof 标准库stddef.h 定义 size_t offsetof(type, member); 分析 C 库宏 offsetof(type, member) 会生成一个类型为 size ...

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

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

  4. 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )

    文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...

  5. 封装成vla函数_不知道怎么封装代码?看看这几种设计模式吧!

    为什么要封装代码? 我们经常听说:"写代码要有良好的封装,要高内聚,低耦合".那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 封装好的代码,内部变量不会污染外部 ...

  6. Python之网络爬虫(验证码、代理IP、防反爬策略、封装一个抓取页面的函数)

    文章目录 一.使用tesseract做OCR验证码识别 二.代理服务器设置 三.反爬与防反爬 四.封装一个抓取页面的函数 一.使用tesseract做OCR验证码识别 1.cookie, sessio ...

  7. 文件/文件夹操作函数封装(使用SHFileOperation和SHCreateDirectory函数实现)

    最近工作中涉及到很多文件和文件夹的处理,包括删除.检测是否存在.移动.复制等,用过CopyFile.MoveFile等函数,也使用过SHFIleOperation()函数,觉得后者比较好用些,参考了C ...

  8. C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)

    菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...

  9. Linux动态库加载函数dlopen源码梳理(一)

    下载了libc的源码,现在就开始libc源码的学习,最近了解到了linux动态库的相关知识,那么就从linux动态库加载函数dlopen进行梳理学习吧. 如果还没下载libc源码,可通过 https: ...

最新文章

  1. 1、MySQL性能优化简述
  2. 这里有8个流行的Python可视化工具包,你喜欢哪个?
  3. access开发精要(8)-设置行高、列宽、隐藏字段,取消隐藏字段,冻结列,取消冻结列,网格线
  4. vim 编译 Python 代码提示配置
  5. java jsonobject_Java实现QQ登录
  6. kmeans中的k的含义_《K-means》知识点与思考
  7. matplotlib——交互按钮中的Home键无法使用
  8. 讲讲我理解的XLNet
  9. 计算机刷bios版本,怎么更新主板bios版本_教你更新技嘉主板bios版本的方法
  10. linux卸载intel驱动程序,删除 Ubuntu Intel 官方驱动包并添加 pdadoka PPA
  11. 高中数学知识点总结归纳之立体几何
  12. linux 串口 arduino,linux通过串口对arduino读写
  13. git将某远程分支的某次提交合并到另一远程分支
  14. 人脸识别技术离滥用仅一步之遥?
  15. 计算机网络——(5)网络操作系统
  16. 仿系统闹钟,实现更新安装之后还可以响铃,开机启动功能需要手机自带开机自启动
  17. lululemon最新报告建立全球幸福感基准
  18. 不要嘀咕自己对新环境的适应能力
  19. C语言函数小练习——C语言实现加、减、乘、除四则运算
  20. CSS浮动--慕课网

热门文章

  1. 从4篇论文看Transformer的局部信息建模
  2. 经典论文复现 | 基于标注策略的实体和关系联合抽取
  3. flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...
  4. linux 端口 镜像吗,Linux如何实现镜像端口
  5. 把度分秒的经纬度转换成十进制的经纬度的工具类
  6. gRPC——简介与Hello World
  7. XCTF WEB robots
  8. 指令级别解释对象创建过程和DCL为什么要volatile
  9. 【项目】springboot中使用kaptcha生成验证码,登录时密码加盐处理
  10. 帮你梳理springboot所有常用注解