Linux的字符设备和块设备的区别是什么?linux
块设备是系统中可以随机(不须要按顺序)访问固定大小数据片(chunks)的设备,这些数据片就称做块。最多见的块设备是硬盘,除此之外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其余块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的通常访问方式。缓存
字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备。若是一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,若是一个设备是随机(无序的)访问的,那么它就属于块设备。bash
这两种基本类型的设备的根本区别在于它们是否能够被随机访问——换句话说就是,可否在访问设备时随意地从一个位置跳转到另外一个位置。性能
内核管理块设备要比管理字符设备细致得多,须要考虑的问题和完成的工做相比字符设备来讲要复杂许多。这是由于字符设备仅仅须要控制一个位置—当前位置—而块设备访问的位置必须可以在介质的不一样区间先后移动。因此事实上内核没必要提供一个专门的子系统来管理字符设备,可是对块设备的管理却必需要有一个专门的提供服务的子系统。不单单是由于块设备的复杂性远远高于字符设备,更重要的缘由是块设备对执行性能的要求很高;对硬盘每多一分利用都会对整个系统的性能带来提高,其效果要远远比键盘吞吐速度成倍的提升大得多。另外,咱们将会看到,块设备的复杂性会为这种优化留下很大的施展空间。优化
块设备经过系统缓存进行读取,不是直接和物理磁盘读取。字符设备能够直接物理磁盘读取,不通过系统缓存。(如键盘,直接相应中断)htm
bash 中判断文件字符型( -c filename),块文件(-b filename) 。get
参考:file
linux公社硬件