special files or block devices provide buffered access to hardware devices, and provide some abstraction from their specifics. Unlike character devices, block devices will always allow the programmer to read or write a block of any size (including single characters/bytes) and any alignment. The downside is that because block devices are buffered, the programmer does not know how long it will take before written data is passed from the kernel's buffers to the actual device, or indeed in what order two separate writes will arrive at the physical device. Additionally, if the same hardware exposes both character and block devices, there is a risk of data corruption due to clients using the character device being unaware of changes made in the buffers of the block device. Most systems create both block and character devices to represent hardware like hard disks. FreeBSD and Linux notably do not; the former has removed support for block devices, while the latter creates only block devices. In Linux, to get a character device for a disk, one must use the "raw" driver, though one can get the same effect as opening a character device by opening the block device with the Linux-specific flag. Pseudo-devices Device nodes on Unix-like systems do not necessarily have to correspond to physical devices. Nodes that lack this correspondence form the group of pseudo-devices. They provide various functions handled by the operating system. Some of the most commonly used (character-based) pseudo-devices include: accepts and discards all input written to it; provides an end-of-file indication when read from. accepts and discards all input written to it; produces a continuous stream of null characters (zero-value bytes) as output when read from. produces a continuous stream of null characters (zero-value bytes) as output when read from, and generates an ("disk full") error when attempting to write to it. produces bytes generated by the kernel's cryptographically secure pseudorandom number generator. Its exact behavior varies by implementation, and sometimes variants such as or are also provided. Additionally, BSD-specific pseudo-devices with an interface may also include: allows userland processes to control PF through an interface. provides access to devices otherwise not found as nodes, used by to implement RAID management in OpenBSD and NetBSD. used by NetBSD's envsys framework for hardware monitoring, accessed in the userland through by the utility. Node creation Nodes are created by the system call. The command-line program for creating nodes is also