![什么是字符设备?](https://linux22.com/image/1006886/%E4%BB%80%E4%B9%88%E6%98%AF%E5%AD%97%E7%AC%A6%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
当我尝试在 USB 驱动器上创建一个分区时,我遇到了一些/dev/
似乎不熟悉的文件/实体(例如hidraw2
)。当我在文件管理器中打开 /dev 并查看它们的属性时,它显示它们是character devices
。在搜索它们时,我偶然发现了一些解释“块设备”是什么的帖子,但到目前为止还没有关于字符设备的帖子。
我想知道字符设备是什么以及它有什么用处。我还想知道为什么它们被称为设备。
答案1
这是一个简单的解释:
- 字符(“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