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

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

原文地址:https://www.cnblogs.com/grooovvve/p/12846404.html