Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121348
  • 博文数量: 16
  • 博客积分: 12
  • 博客等级: 民兵
  • 技术积分: 356
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 16:42
个人简介

需要走的路还很长呀。。。。

文章分类
文章存档

2017年(2)

2013年(14)

分类: LINUX

2013-08-22 19:23:03

Linux下对文件操作有两种方式:系统调用和库函数调用。系统调用实际上就是指最底层的一个调用,在linux程序设计里面是底层调用。库函数是根据实际需要而包装好的系统调用,用户可在程序中方便的使用库函数,如标准I O库。库函数相当在用户和系统之间增加了一个中间层。在输入、输出操作中,直接使用系统调用效率会非常底,主要原因在于系统调用会影响系统性能。与函数调用相比,系统调用的开销大。因为在执行系统调用的时候,要切换到内核代码区执行,然后再返回用户代码。这必然就需要大量的时间开支。库函数和系统调用关系图如下:
                                 

1、  库函数

为了提高文件访问操作的效率,并且使得文件操作变得更方便,Linux发行版提供了一系列的标准函数库。他们是一些由函数构成的集合,你可以在自己的程序方便的中使用它们去操作文件。标准C库函数提供的文件操作函数如fopen, fread, fwrite, fclose, fflush, fseek等。库函数调用通常用于应用程序中对一般文件的访问。库函数调用是系统无关的,因此可移植性好。由于库函数调用是基于C库的,不能用于内核空间的驱动程序中对设备的操作。

2、  Linux系统调用

用系统调用来访问文件是最直接的方式。系统调用函数直接作用于操作系统内核的设备驱动程序从而实现文件访问。系统调用通常用于底层文件访问。系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性。系统调用发生在内核空间,因此如果在用户空间的一般应用程序中使用系统调用来进行文件操作,会有用户空间到内核空间切换的开销。事实上,在用户空间使用库函数来对文件进行操作,因为文件总是存在于存储介质上,因此不管是读写操作,都是对硬件(存储器)的操作,都必然会引起系统调用。就是说,库 函数对文件的操作实际上是通过系统调用来实现的。例C库函数fwrite()就是通过write()系统调用来实现的。

3、  系统调用和库函数区别

两者区别有:(1)在所有的ANSI C编译器版本中,C库函数是相同的;系统调用与系统有关,各个操作系统的系统调用是不同的。(2)库函数调用函数库中的一段程序,这段程序最终还是通过系统调用实现;系统调用调用的是系统内核的服务(3)库函数调用在用户地址空间执行,运行时间属于“用户时间”;系统调用在内核空间执行,运行时间属于“系统时间”。(4)库函数属于过程调用,调用开销较小;系统调用需要在用户空间和内核上下文环境间切换,开销较大。


阅读(3052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~