关于块设备 和 字符设备 介绍:

系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。
       
        最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。
       
        另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备。如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序的)访问的,那么它就属于块设备。这两种类型的设备的根本区别在于它们是否可以被随机访问——换句话说就是,能否在访问设备时随意地从一个位置跳转到另一个位置。
       
        举个例子,键盘这种设备提供的就是一个数据流,当你敲入“fox” 这个字符串时,键盘驱动程序会按照和输入完全相同的顺序返回这个由三个字符组成的数据流。如果让键盘驱动程序打乱顺序来读字符串,或读取其他字符,都是没有意义的。所以 键盘就是一种典型的字符设备,它提供的就是用户从键盘输入的字符流。对键盘进行读操作会得到一个字符流,首先是“f”,然后是“o”,最后是“x”,最终是文件的结束(EOF)。当没人敲键盘时,字符流就是空的。
       
        硬盘设备的情况就不大一样了。
       
        硬盘设备的驱动可能要求读取磁盘上任意块的内容,然后又转去读取别的块的内容,而被读取的块在磁盘上位置不一定要连续,所以说硬盘可以被随机访问,而不是以流的方式被访问,显然它是一个块设备。
       
        内核管理块设备要比管理字符设备细致得多,需要考虑的问题和完成的工作相比字符设备来说要复杂许多。 这是因为字符设备仅仅需要控制一个位置—当前位置—而块设备访问的位置必须能够在介质的不同区间前后移动。所以事实上内核不必提供一个专门的子系统来管理字符设备,但是对块设备的管理却必须要有一个专门的提供服务的子系统。不仅仅是因为块设备的复杂性远远高于字符设备,更重要的原因是块设备对执行性能的要求很高;对硬盘每多一分利用都会对整个系统的性能带来提升,其效果要远远比键盘吞吐速度成倍的提高大得多。 另外,我们将会看到,块设备的复杂性会为这种优化留下很大的施展空间。

简单来讲,块设备可以随机存取,而字符设备不能随机存取!

以上内容转载自 百度问答


linux驱动程序中字符设备和块设备的三点区别:

1.字符设备只能以字节为最小单位访问,而块设备以块为单位访问,例如512字节,1024字节等
2.块设备可以随机访问,但是字符设备不可以
3.字符和块没有访问量大小的限制,块也可以以字节为单位来访问


如何查看块设备文件 或 字符设备文件:

方法1:

使用 ll (ls -l):root@zhengzelin:/# ll /dev/
total 4
d rwxr-xr-x 19 root root        3740 Feb 26 22:59 ./
c rw-------  1 root root     10, 235 Feb 26 22:59 autofs
l rwxrwxrwx  1 root root          11 Feb 27 06:59 core -> /proc/kcore
b rw-rw----  1 root disk      7,   0 Feb 26 22:59 loop0
- rwxrwxrwx  ............................d :目录
- :普通文件(不是块设备文件 也不是字符设备文件)
b :块设备文件(如硬盘;支持以 block为单位进行"随机访问")
c : 字符设备文件(如键盘;支持以 character 为单位进行"线性访问" )
l : 软连接文件

方法2:

root@zhengzelin:/# file /dev/vda1
/dev/vda1: block special (253/1)         # 块设备文件
root@zhengzelin:/# file /dev/autofs
/dev/autofs: character special (10/235)  # 字符设备文件

方法3:

使用 if 中的 文件测试运算符:-d : 目录
-f : 普通文件
-d : 块设备文件
-c : 字符设备文件eg:
root@zhengzelin:/# if [ -d /etc/ ];then echo "yes";else echo "no";fi
yes
root@zhengzelin:/# if [ -c /dev/autofs ];then echo "yes";else echo "no";fi
yes
root@zhengzelin:/# if [ -b /dev/vda ];then echo "yes";else echo "no";fi
yes
root@zhengzelin:/# if [ -f /root/aaa ];then echo "yes";else echo "no";fi
yes

你知道什么是 块设备 和 字符设备 吗?以及如何查看 块设备文件 和 字符设备文件 ?相关推荐

  1. 转载:谢谢原作者:块设备驱动实战基础篇一 (170行代码构建一个逻辑块设备驱动)

    1   内核块设备驱动基础学习与实战 1.1 设备驱动IO架构初探 操作系统是如何将数据读到缓冲区的,发生了什么?我们带着这样的问题,粗略走一下read调用系统过程,希望这个初探,可以唤起大家研究操作 ...

  2. linux设备文件列表,linux 设备文件

    设备文件: b:按块为单位,随机访问的设备 如:硬盘 c:按字符为单位,线性设备 如:键盘 [root@localhost tm]# ll /dev/ crw-rw---- 1 root audio  ...

  3. linux 读写设备文件,linux-中块设备文件及字符设备文件的本质区别

    原标题:linux-中块设备文件及字符设备文件的本质区别 在LINUX系统文件类型分类的文章中我们提到了 块设备 和 字符设备文件,那么什么是块设备 字符设备文件呢?他们之间有什么本质上的区别呢? 设 ...

  4. C语言详解文件操作(一):文件操作基础概念、按照字符、按照行块、按照格式化和随机位置读写文件

    文章目录 一.文件操作基础概念 二.文件读写:按照字符方式读写 三.文件读写:按行和块读写 四.文件读写:格式化和随机位置 一.文件操作基础概念 C语言中的文件操作的好处:       一个文件通常是 ...

  5. linux blkid命令 查看块设备文件系统类型、LABEL、UUID信息 简介

    在Linux下可以使用 blkid命令 对查询设备上所采用文件系统类型进行查询.blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型.LABEL.UUID等信息进行查询.要使用这个命令 ...

  6. linux 命令查看块设备,系统运维|用 Linux blkid 命令查找块设备详情

    今天我们将会向你展示如何使用 lsblk 和 blkid 工具来查找关于块设备的信息,我们使用的是一台安装了 CentOS 7.0 的机器. lsblk lsblk 是一个 Linux 工具,它会显示 ...

  7. linux 驱动 文件计数,字符设备驱动程序1

    一.主设备号和此设备号主设备号表示设备对应的驱动程序:次设备号由内核使用,用于正确确定设备文件所指的设备.内核用dev_t类型()来保存设备编号,dev_t是一个32位的数,12位表示主设备号,20为 ...

  8. 1200/1500PLC字符数组与字符串转换FB块

    1200/1500PLC系统块里没有发现字符数组转换成字符串和字符串转换成字符数组指令,所以自己用SCL语言开发了一个标准FB块,具体的代码如下,需要源码加我qq584472557 1.字符数组转字符 ...

  9. Python 3 文件和字符编码

     一.文件: 打开文件的模式有: r,只读模式(默认).w,只写模式. 不可读,不存在则创建:存在则删除内容a,追加模式. 可读,不存在则创建:存在则只追加内容 "+"表示可以同时 ...

最新文章

  1. 中科院自动化所招AI算法实习生!
  2. 关于顺序栈的基本操作
  3. 权限管理----角色管理
  4. 暗备用的运行状态_备用发电机管理制度
  5. InputStream 、 InputStreamReader 、 BufferedReader区别
  6. postgresql中表的继承及分区表(四)
  7. Android JNI_OnLoad()函数
  8. WebJars——web端静态资源的jar包
  9. 为什么python打不开_python文件打不开如何解决
  10. 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法
  11. 2021年中国现制茶饮行业洞察报告
  12. 不定宽高的div如何垂直居中
  13. python运行结果导出_SPSS调用python(5):输出结果的读取
  14. 实现输入界面适应键盘的显示和隐藏事件
  15. QTableView结构及用法
  16. LSD(线段检测测试文件)
  17. 个人建站系列步骤流程(二.申请域名+实名认证)
  18. 王道考研计算机网络学习心得——第一章-计算机网络体系结构
  19. ADMob 原生广告展示不完全,mediaView无图片数据
  20. 洛谷4168 [Violet]蒲公英

热门文章

  1. html设置margin无效,CSS中margin不起作用的原因及解决方法
  2. 30岁以后,我不建议你再“线性努力”
  3. 电设3----脉冲信号测试仪
  4. Java连接MySQ据库 | 一文教会使用JDBC
  5. python 求离差_指标权重确定方法之标准离差法(均方差法)
  6. 百度大脑“刷脸”10万+的背后
  7. 【nuXmv学习笔记】4:模型检测实例
  8. clickhouse--join操作汇总【semi、anti、any、asof、global、colocate、cross】
  9. 基于51单片机的蓝牙模块
  10. 网络通讯控件PowerSNMP for .NET常见问题合集