c 语言与操作系统

首先我们来区别一下几个概念

1,C 标准库:这里面有我们常见的stdio.h,stdlib.h,math.h等文件。C标准库是针对C语言而言的,它没有平台差异性。其中的一些函数的实现,调用了系统函数接口

2,C运行时库:运行C程序所需要的一些库,我们可以不要math.h也能运行程序,但是少了运行时库就不能进入main函数了。

3,win32 API:它是针对操作系统做操作的。是系统提供给用户的接口可以对系统来做操作,来使用操作系统的某个服务。该接口的实现是通过复杂的系统函数或汇编的组合来实现的。

4,第三方库(即第三方API):通过调用win32 API或其他一些函数来实对操作系统做操作,实现某个复杂的特定功能

实际上,系统调用会影响性能,系统从用户态和内核态来回切换。为了减少开销,因此需要减少系统调用的次数,并且让每次系统调用尽可能的完成多的任务。硬件也会限制对底层系统调用一次所能写的数据块的大小。为了给设备和文件提供更高层的接口,Linux系统提供了一系列的标准函数库。使用标准库函数,可以高效的写任意长度的数据块,库函数在数据满足数据块长度要求时安排执行底层系统调用。

库函数:

        库函数(Library function)是把函数放到库里,供别人使用的一种方式。.方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。一般放在.lib文件中。库函数调用则是面向应用开发的,库函数可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。(由于版权原因,库函数的源代码一般是不可见的,但在头文件中你可以看到它对外的接口)。

        glibc 是 Linux 下使用的开源的标准 C 库。

        read()函数根据参数,直接就能读文件,而背后隐藏的比如文件在硬盘的哪个磁道,哪个扇区,加载到内存的哪个位置等等这些操作,程序员是不必关心的,这些操作里面自然也包含了系统调用。

        部分Libc库中的函数的功能的实现还是借助了系统掉调用,比如printf的实现最终还是调用了write这样的系统调用;而另一些则不会使用系统调用,比如strlen, strcat, memcpy等。 

        结论:部分库函数会执行系统调用,只不过我们看不见。部分库函数不执行系统调用。系统调用是为了方便使用操作系统的接口,而库函数则是为了人们编程的方便。库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好。由于库函数是基于c库的,因此不能用于内核对于底层驱动设备的操作。 

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

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

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

(4)系统调用依赖于平台,库函数并不依赖
这里写图片描述

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值