• Linux系统编程1_C标准函数库和系统调用


    系统调用和库函数的区别:

    系统调用就是内核的接口;

    C库函数的实现就是去使用这些系统调用;

    对应用代码来说,C库函数系统调用区别不大;

    系统调用通常提供一种最小接口;C库函数可以提供较复杂的功能;

    一般来讲,系统调用和C库函数都是用同样的术语:函数;

    使用系统调用会影响系统的性能。
    在执行调用时的从用户态切换到内核态,再返回用户态会有系统开销。
    为了减少开销,因此需要减少系统调用的次数,并且让每次系统调用尽可能的完成多的任务。


    Linux系统提供了一系列的标准函数库
    使用标准库函数,可以高效的写任意长度的数据块,库函数在数据满足数据块长度要求时安排执行底层系统调用。

    一般地,操作系统为了考虑实现的难度和管理的方便,它只提供少部分的系统调用
    这些系统调用一般都是由C和汇编混合编写实现的,其接口用C来定义,而具体的实现则是汇编,
    这样的好处就是执行效率高,而且,极大的方便了上层调用。


    库函数(Library function)是把函数放到库里,供别人使用的一种方式。
    方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。
    一般放在.lib文件中。库函数调用则是面向应用开发的,库函数可分为两类
    一类是C语言标准规定的库函数,一类是编译器特定的库函数

    随着系统提供的这些库函数把系统调用进行封装或者组合,可以实现更多的功能,
    这样的库函数能够实现一些对内核来说比较复杂的操作。

    glibc 是 Linux 下使用的开源的标准 C 库,它是 GNU 发布的 libc 库,即运行时库。
    这些基本函数都是被标准化了的,而且这些函数通常都是用汇编直接实现的。
    glibc 为程序员提供丰富的 API(Application Programming Interface),
    我们经常说到的POSIX(Portable Operating System Interface of Unix)是针对API的标准
    即针对API的函数名,返回值,参数类型等。POSIX兼容也就指定这些接口函数兼容,但是并不管API具体如何实现。

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

    库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好

    由于库函数是基于c库的,因此不能用于内核对于底层驱动设备的操作。

    系统调用与库函数是什么,区别是什么:
    https://blog.csdn.net/lht1314tttt/article/details/79150776

    常用ANSI C标准库函数:
    https://blog.csdn.net/cclethe/article/details/74859507

    Linux常用系统调用:
    https://www.cnblogs.com/shijiaqi1066/p/5749030.html

    c库函数和linux系统调用的区别:
    https://blog.csdn.net/qinziyng123/article/details/5768278?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1

    ========================================================

    glibc和libc都是Linux下的C函数库:

    libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GNU C 函数库。

    ANSI C 函数库是基本的 C 语言函数库,包含了 C 语言最基本的库函数。

    GNU C 函数库是一种类似于第三方插件的东西。

    由于 Linux 是用 C 语言写的,所以 Linux 的一些操作是用 C 语言实现的,
    因此,GNU 组织开发了一个 C 语言的库 以便让我们更好的利用 C 语言开发基于 Linux 操作系统的程序。

    不过现在的不同的 Linux 的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了。

    libc, glibc在一个层次,都是C的标准实现库,是操作系统级别的基石之一。
    glib是用C写的一些utilities,即C的工具库,和libc/glibc没有关系。

    libc、glibc和glib的关系:
    https://blog.csdn.net/yasi_xi/article/details/9899599

    ====================================================

  • 相关阅读:
    MySQL表碎片整理
    MySQL表碎片整理
    MySQL配置索引页的合并阈值
    MySQL InnoDB配置统计信息
    MySQL InnoDB配置统计信息
    代码检查工具sonarqube介绍及使用
    gradle多模块构建集成swagger
    springboot不加载bootstrap.properties文件
    nexus3.x启动不起来
    linux防火墙查看状态firewall、iptable
  • 原文地址:https://www.cnblogs.com/grooovvve/p/12846404.html
Copyright © 2020-2023  润新知