UNIX 系统中的字符特殊文件和块特殊文件是什么?

UNIX 系统中的字符特殊文件和块特殊文件是什么?

字符特殊文件和块特殊文件与类 Unix 系统中的常规文件有何不同?为什么它们分别被称为“字符特殊”和“块特殊”?

答案1

当程序从文件读取或写入数据时,请求将发送到内核驱动程序。如果文件是常规文件,则数据由文件系统驱动程序处理,并且通常存储在磁盘或其他存储介质上的区域中,并且从文件中读取的数据是先前写入该位置的数据。还有其他文件类型会发生不同的情况。

当数据读取或写入设备文件时,该请求由该设备的驱动程序处理。每个设备文件都有一个关联的编号,用于标识要使用的驱动程序。设备如何处理数据是它自己的事。

块设备(也称为块特殊文件)的行为通常与普通文件非常相似:它们是字节数组,在给定位置读取的值是最后写入该位置的值。来自块设备的数据可以缓存在内存中并从缓存中读回;写入可以被缓冲。块设备通常是可查找的(即,应用程序可以更改文件内的位置概念)。 “块设备”这个名称来源于这样的事实:相应的硬件通常一次读取和写入整个块(例如硬盘上的扇区)。

字符设备(也称为字符特殊文件)的行为类似于管道、串行端口等。对它们进行写入或读取是立即操作。驱动程序如何处理数据是它自己的事。将一个字节写入字符设备可能会导致它显示在屏幕上、在串行端口上输出、转换为声音……从设备读取一个字节可能会导致串行端口等待输入,可能会返回一个随机数byte ( /dev/urandom), ... “字符设备”这个名称来自于每个字符都是单独处理的事实。

维基百科了解 /dev 及其子目录和文件了解更多信息。

答案2

它们指向一个驱动程序,可以通过以下方式创建mknod。查看其手册页,似乎块设备是有缓冲的,而字符设备是无缓冲的。块设备具有“块大小”,指示可访问的块的大小。 (对于存储设备,块大小通常在 512 B 到 4 KiB 之间)存储设备和内存通常作为块设备进行访问,而串行端口和终端等设备通常作为字符设备进行访问。

它们通常位于/dev(并且无法在使用nodev选项(或其等效项)安装的分区上运行)

ls -l通常找到大小的位置显示设备的两个逗号分隔的数字。这些是指向驱动程序的主要数字和次要数字。它们的类型也在输出的权限列中指示为“c”或“b” ls -l

/dev可以通过多种方式填充。在最新的 Linux 内核版本上乌德夫通常使用,在 Solaris 上它包含指向 的链接/devices,这是一个虚拟 devfs 文件系统。

答案3

Unix/Linux 中的文件类型:普通或常规文件、目录、设备(特殊)文件、链接、命名管道和套接字。

A设备(特殊)文件是设备驱动程序的接口,它出现在文件系统中,就好像它是普通文件一样。它们是字符设备、块设备和伪设备(如/dev/null)。

性格驱动一次会发送一个字符,因此您需要携带一小部分负载,但必须发出很多请求。块驱动意味着您获得大量字符(数据),因此您的负载更大,但必须执行更少的请求。比喻:基本上与按瓶或按板条箱购买苏打水相同。

当您知道可以预期有多少数据时,块驱动非常有用,磁盘上的文件通常就是这种情况。

当您不知道数据何时停止时,字符驱动更实用,因此您可以保持数据运行直到不再有字符通过。例如,互联网连接,因为您不知道将从服务器接收的数据流的大小。

例如:

  • 字符设备驱动程序是允许操作系统与输入/输出设备进行通信的特殊文件。例子:键盘、鼠标、显示器、音频或显卡以及盲文。
  • 块设备用于与存储设备通信,能够缓冲输出并存储数据以供以后检索。例子:硬盘、内存。

礼貌

相关内容