What is a character device?
I was trying to make a partition on my USB drive when I came across some files/entities in /dev/
which seemed unfamiliar (such as hidraw2
). When I opened /dev in file manager and looked into their properties, it says that they are character devices
. While searching about them, I came across posts that explain what 'block devices' are, but no such post for character devices so far.
I would like to know what a character device is and what it does. Also I wonder about why they are called devices.
This is a simple explanation:
- A Character ('c') Device is one with which the Driver communicates by sending and receiving single characters (bytes, octets).
- A Block ('b') Device is one with which the Driver communicates by sending entire blocks of data.
- Examples for Character Devices: serial ports, parallel ports, sounds cards.
- Examples for Block Devices: hard disks, USB cameras, Disk-On-Key.
- For the user, the type of the Device (block or character) does not matter - you just care that this is a hard disk partition or a sound card.
- Driver programmers, however, do care.
Here is more:
16.1.4.2 Block and Character Devices A block device is one that is designed to operate in terms of the block I/O supported by Digital UNIX. It is accessed through the buffer cache. A block device has an associated block device driver that performs I/O by using file system block-sized buffers from a buffer cache supplied by the kernel. Block device drivers are particularly well-suited for disk drives, the most common block devices.
A character device is any device that can have streams of characters read from or written to it. A character device has a character device driver associated with it that can be used for a device such as a line printer that handles one character at a time. However, character drivers are not limited to performing I/O a single character at a time (despite the name ``character'' driver). For example, tape drivers frequently perform I/O in 10K chunks. A character device driver can also be used where it is necessary to copy data directly to or from a user process. Because of their flexibility in handling I/O, many drivers are character drivers. Line printers, interactive terminals, and graphics displays are examples of devices that require character device drivers.
Sources:
http://haifux.org/lectures/86-sil/kernel-modules-drivers/node10.html
https://arstechnica.com/civis/viewtopic.php?t=787631