基本设备类型简介

阅读更多
    Linux 将设备分成三种基本类型,分别概述如下:
    1、字符设备
    字符设备是个能像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现 open、close、read 和 write 系统调用。字符终端(/dev/console)和串口(/dev/tty0以及类似设备)就是两个字符设备,它们能很好地说明“流”这种抽象概念。字符设备可以通过文件系统节点来访问,比如 /dev/tty1 和 /dev/lp0 等。设备文件和普通文件的区别在于普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。但也存在具有数据区特性的字符设备,可前后移动访问设备。例如帧抓取器,应用程序可以用 mmap 或 lseek 访问抓取的整个图像。

    2、块设备
    块设备也是通过 /dev 目录下的文件系统节点来访问的。块设备(例如磁盘)上能容纳文件系统。在大多数 Unix 系统中,块设备每次 I/O 操作只能传输一个或多个完整的块,而每块包含 512 字节(或 2 的更高次幂字节的数据)。Linux 可以让应用程序像字符设备一样读写块设备,允许一次传递任意多字节的数据。因而,块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核及驱动程序之间的软件接口不同。

    3、网络接口
    任何网络事务都经过一个网络接口形成,即一个能够和其他主机交换数据的设备。通常,接口是个硬件设备,但也可能是个纯软件设备,比如环回(loopback)接口。网络接口由内核中的网络子系统驱动,负责发送和接收数据包,但它不需要了解每项事务如何映射到实际传送的数据包。许多网络连接(尤其是使用 TCP 协议的连接)是面向流的,但网络设备却围绕数据包的传输和接收而设计,它不需要知道各个连接的相关信息,只需处理数据包即可。由于不是面向流的设备,因此将网络接口映射到文件系统中的节点就比较困难。Unix 访问网络接口的方法仍然是给它们分配一个唯一的名字(如 eth0),但该名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于和字符和块设备驱动程序之间的通信,
是调用一套和数据包传输相关的函数而不是 read、write 等。

你可能感兴趣的:(linux,unix,设备类型)