字符特殊文件和块特殊文件与类Unix系统中的常规文件有何不同?为什么他们分别被称为“字符特殊”和“块特殊”?
发布于 2013-01-03 02:23:50
当程序从文件中读取或写入数据时,请求将转到内核驱动程序。如果文件是常规文件,则数据由文件系统驱动程序处理,并且通常存储在磁盘或其他存储介质上的区域中,从文件中读取的数据就是以前在该位置写入的数据。还有其他文件类型会发生不同的事情。
当数据被读取或写入设备文件时,该请求由该设备的驱动程序处理。每个设备文件都有一个相关联的编号来标识要使用的驱动程序。设备对数据的处理是它自己的事情。
块设备(也称为块特殊文件)的行为非常类似于普通文件:它们是一个字节数组,在给定位置读取的值是最后写入的值。来自块设备的数据可以缓存在内存中并从缓存中读取;写可以被缓冲。块设备通常是可查找的(例如,应用程序可以更改文件中的位置的概念)。“块设备”的名称来自这样一个事实:相应的硬件通常一次读写整个块(例如硬盘上的扇区)。
字符设备(也称为字符特殊文件)的行为就像管道、串口等。对它们进行写入或读取是一种即时的操作。驱动程序对数据的处理是它自己的事情。将字节写入字符设备可能会导致它显示在屏幕上,输出在串行端口上,转换成声音,.从设备读取字节可能导致串口等待输入,可能返回随机字节(/dev/urandom
),.“字符设备”的名称来自这样一个事实,即每个字符都是单独处理的。
有关更多信息,请参见维基百科和理解/dev及其子目录和文件。
发布于 2013-01-02 07:07:52
它们指向驱动程序,可以由mknod
创建。从它的手册页面来看,似乎块设备是缓冲的,而字符设备是非缓冲的。块设备的“块大小”表示可以访问的块的大小。(对于存储设备,块大小通常在512 B到4 KiB之间)存储设备和存储器通常作为块设备访问,而诸如串行端口和终端等设备通常作为字符设备访问。
它们通常在/dev
中找到(并且不能在安装有nodev
选项(或其等效的)的分区上工作)。
在ls -l
中,对于通常可以找到大小的设备,显示了两个逗号分隔的数字。这些是主要的和次要的数字,指的是司机。它们的类型在ls -l
输出的权限列中也表示为"c“或"b”。
/dev
可以通过多种方式填充。在最近的Linux内核版本中,通常使用udev,在Solaris上它包含指向/devices
的链接,这是一个virual文件系统。
发布于 2017-02-22 00:16:01
Unix/Linux中的文件类型:普通或常规文件、目录、设备(特殊)文件、链接、命名管道和套接字。
设备(特殊)文件是显示在文件系统中的设备驱动程序的接口,就好像它是一个普通文件一样。它们是字符设备、块设备和伪设备(如/dev/null
).
字符驱动将发送一个字符在时间,因此您需要一个小的负载携带,但必须作出许多要求。块驱动意味着您获得了大量的字符(数据)集合,因此您有一个**更大的负载,但必须执行较少的请求。类比:基本上和用瓶子买苏打水或者用箱子买苏打水是一样的。
当您知道可以期望获得多少数据时,块驱动是非常有用的,这通常是磁盘上文件的情况。
当您不知道您的数据何时停止时,字符驱动更实用,因此您将它保持运行直到没有更多的字符通过。例如,Internet连接,因为您不知道从服务器接收到的数据流的大小。
例如,
https://unix.stackexchange.com/questions/60034
复制相似问题