【基础IO 】系统调用和库函数

【基础IO 】其他文章:(待更新)

1、认识文件描述符,理解重定向。

2、系统调用和库函数的区别(静态库 & 动态库)。


库:

库通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。库是别人写好的现有的,成熟的,可以复用的代码,我们只需要知道其接口如何定义,便可以自如使用。

库的使用大大提高了程序员编写代码的效率。从使用方法上分库大体上可以分为两类:静态库和共享库。在windows中静态库是以 .lib 为后缀的文件,共享库是以 .dll 为后缀的文件。在linux中静态库是以 .a 为后缀的文件,共享库是以 .so为后缀的文件。

  • 1、运行时库:Unix中一个典型的运行时库例子就是libc,它包含标准的C函数,如,print(),exit()等等,用户能创建他们自己的运行库(在Windows中是DLL),而具体的细节依赖编译器和操作系统的。

  • 2、静态库:函数和数据被编译进一个二进制文件(通常扩展名为.lib),静态库实际上是在链接时被链接到EXE的,库本身不需要与可执行文件一起发行。

  • 3、动态库:用VC++创建的动态库包含两个文件,一个lib文件和一个dll文件,这个lib文件就是引入库,不是静态库,引入库有时也叫输入库或导入库。

动态库的应用有两个主要原因:

1、共享。多个程序可以使用同一个动态库

2、开发模式好。要求设计者对功能划分得更好

但动态库装载的时候慢,特别是运行中装载有明显延迟。一旦装载完毕执行起来根静态库比较慢不了。

静态库的优点:

代码装载速度快,执行速度略比动态库快,没有什么更多的优势。

大软件还是用动态库吧


系统调用 & 库函数

系统调用(英语:system call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。

库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。

函数库调用 系统调用
在所有的ANSI C编译器版本中,C库函数是相同的 各个操作系统的系统调用是不同的
它调用函数库中的一段程序(或函数) 它调用系统内核的服务
与用户程序相联系 是操作系统的一个入口点
在用户地址空间执行 在内核地址空间执行
它的运行时间属于“用户时间” 它的运行时间属于“系统”时间
属于过程调用,调用开销较小 需要在用户空间和内核上下文环境间切换,开销较大
在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用
典型的C函数库调用:system fprintf malloc 典型的系统调用:chdir fork write brk;

详解

(1)库函数是语言或应用程序的一部分,而系统调用是内核提供给应用程序的接口,属于系统的一部分

(2)库函数在用户地址空间执行,系统调用是在内核地址空间执行,库函数运行时间属于用户时间,系统调用属于系统时间,库函数开销较小,系统调用开销较大

(3)库函数是有缓冲的,系统调用是无缓冲的

(4)系统调用依赖于平台,库函数并不依赖

猜你喜欢

转载自blog.csdn.net/m0_37925202/article/details/81676954