系统调用和系统库函数的一些基础知识

文件

linux中文件具有特殊意义,它们为操作系统服务和设备提供了一个简单统一的接口,在linux中,几乎一切都是文件.

我们可以像使用文件那样使用磁盘,串行口,打印机和其他设备,大多情况下,只需要五个基本系统调用函数便可操作这些硬件:open(),close(),read(),write(),ioctl().

除了本身内容外,文件还有一个名字和一些属性,例如可读,所属用户等管理信息,这些信息都放在文件的inode(节点)数据结构里.inode是文件系统中一个特别的数据块,它还包含文件在磁盘中的位置和长度.


目录

目录也是文件,它用来保存其他文件的inode编号和文件名.删除文件名就等于删除该文件,磁盘上的相应位置会被记为可用.

子目录也包含在目录中.


设备

硬件在linux中通常被映射为文件,可以用对文件的操作函数来操作设备.

设备可以分为字符设备和块设备,前者只能一次读写一个字符,后者可以读写某一长度的数据块.


设备驱动程序

一般设备都会有一个驱动程序,它知道如何启动,关闭和操作该设备,例如磁带机的驱动程序知道磁带必须以固定长度的数据块进行读写,知道如何回绕到正确位置.

驱动程序封装了所有与该设备有关的特性.


内核

内核由多个必要的设备驱动程序组成,它是一组可能用到的硬件驱动程序的组合,如磁盘驱动程序+显卡驱动程序+网卡驱动程序等等.内核为应用程序提供安全访问.


系统调用

内核为应用程序提供安全访问是通过系统调用实现的,它将硬件驱动封装起来,为上层开放一组函数,这组函数被称为系统调用.前面的open(),close(),read(),write(),ioctl()都是系统调用函数.


操作系统库函数

在输入/输出操作中,直接用底层系统调用的效率是很低的,因为:

1.系统调用会影响系统性能;与函数调用相比,系统调用开销要大些,系统调用时linux必从用户代码切换到内核代码,然后再返回用户代码.减少这种开销的方法是尽量减少系统调用的次数且让每次调用完成尽可能多的任务.

2.硬件会对底层系统调用一次读写的数据量进行限制,例如磁带机一次通常只能写10KB.

为了给设备和磁盘文件提供更高层的接口,linux发行版提供了一系列的标准库函数.例如提供输入/输出缓冲的标准I/O库,使用它包含的fread(),fwrite()就能够读写任意长度的数据块.

标准C中与标准I/O库对应的头文件就是我们熟悉的stdio.h文件.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值