什么是字符设备?

Nur*_*mik 13 filesystem usb files

当我遇到一些/dev/似乎不熟悉的文件/实体(例如hidraw2)时,我试图在我的 USB 驱动器上创建一个分区。当我在文件管理器中打开 /dev 并查看它们的属性时,它说它们是character devices. 在搜索它们时,我遇到了解释什么是“块设备”的帖子,但到目前为止还没有关于字符设备的帖子。

我想知道什么是字符设备以及它的作用。我也想知道为什么它们被称为设备。

Geo*_*sen 18

这是一个简单的解释:

  • 字符 ('c') 设备是驱动程序通过发送和接收单个字符(字节、八位字节)与之通信的设备。
  • 块 ('b') 设备是驱动程序通过发送整个数据块与之通信的设备。
  • 字符设备示例:串行端口、并行端口、声卡。
  • 块设备的示例:硬盘、USB 摄像头、Disk-On-Key。
  • 对于用户来说,设备的类型(块或字符)无关紧要 - 您只关心这是硬盘分区还是声卡。
  • 但是,驱动程序程序员确实很在意。

这里有更多:

16.1.4.2 块设备和字符设备 块​​设备是一种设计用于根据 Digital UNIX 支持的块 I/O 进行操作的设备。它是通过缓冲区高速缓存访​​问的。块设备有一个关联的块设备驱动程序,它通过使用内核提供的缓冲区缓存中的文件系统块大小的缓冲区来执行 I/O。块设备驱动程序特别适用于磁盘驱动器,这是最常见的块设备。

字符设备是任何可以读取或写入字符流的设备。字符设备具有与之关联的字符设备驱动程序,可用于一次处理一个字符的行式打印机等设备。但是,字符驱动程序不限于一次执行一个字符的 I/O(尽管名称为“字符”驱动程序)。例如,磁带驱动程序经常以 10K 块的形式执行 I/O。当需要将数据直接复制到用户进程或从用户进程复制数据时,也可以使用字符设备驱动程序。由于它们在处理 I/O 方面的灵活性,许多驱动程序都是字符驱动程序。行式打印机、交互式终端和图形显示器是需要字符设备驱动程序的设备示例。

资料来源:

http://haifux.org/lectures/86-sil/kernel-modules-drivers/node10.html

https://arstechnica.com/civis/viewtopic.php?t=787631