设备类型

设备文件的性质

  • 设备文件不是普通的磁盘文件
  • 读写设备的数据需要与相应的设备驱动器通信

设备文件的类型

  • 字符设备:读写串行数据字节流,如串口、终端等
  • 块设备:随机读写固定尺寸数据块,如磁盘设备

说明

  • 磁盘挂载到文件系统后,使用文件和目录模式操作
  • 程序一般不使用块设备,内核实现文件系统时使用块设备操作文件

设备号

大设备号(major device number)

  • 指定设备对应哪个设备驱动器
  • 对应关系由内核确定

小设备号(minor device number)

  • 区分由设备驱动器控制的单个设备或者设备的某个组件

实例

  • 3号主设备为IDE控制器,IDE控制器可以连接多个设备(磁盘,磁带,CD-DVD控制器等)
  • 主设备的小设备号为0,而从设备的小设备号为64
  • 主设备单独分区的小设备号从0到63,从设备单独分区的小设备号从64开始

设备项

设备项:与文件类似

  • 可以使用mv,rm命令移动或者删除
  • 如果设备支持读写,cp命令可以从(向)设备读取(写入)数据

mknod系统调用:创建设备项(文件系统结点)

设备项仅仅是与设备通信的门户,在文件系统中创建设备项并不意味着设备可用

只有超级用户才可以创建设备项

设备目录

操作系统已知的设备目录:/dev

实例:

硬盘hda为块设备

硬盘有一个分区hda1

硬件设备:

注意:不同的操作系统有所不同;

设备描述 设备名称 大设备号 小设备号
第一软驱 /dev/fd0 2 0
第二软驱 /dev/fd1 2 1
主IDE控制器,主设备 /dev/hda 3 0
主IDE控制器,主设备,第一分区 /dev/hda1 3 1
主IDE控制器,从设备 /dev/hdb 3 64
主IDE控制器,从设备,第一分区 /dev/hdb1 3 65
次IDE控制器,主设备 /dev/hdc 22 0
次IDE控制器,主设备 /dev/hdd 22 64
第一SCSI设备 /dev/sda 8 0
第一SCSI设备,第一分区 /dev/sda1 8 1
第一SCSI设备,CD-ROM驱动器 /dev/scd0 11 0
第二SCSI设备,CD-ROM驱动器 /dev/scd1 11 1
串口0 /dev/lp0或/dev/par0 6 0
串口1 /dev/lp1或/dev/par1 6 1
第一串口   /dev/ttyS0 4 64
第二出口 /dev/ttyS1 4 65
IDE磁带设备 /dev/ht0 37 0
第一SCSI磁带设备 /dev/st0 9 0
第二SCSI磁带设备 /dev/st1 9 1
系统控制台 /dev/console 5 1
第一虚拟终端设备 /dev/tty1 4 1
第二虚拟终端设备 /dev/tty2 4 2
进程当前终端设备 /dev/tty 5 0
声卡 /dev/audio 14 5

特殊设备:

/dev/null :哑设备

  • 任何写入哑设备的数据都会被抛弃
  • 从哑设备中读取不到任何的数据,例如 cp /dev/null empty-file 命令将创建 一个长度为0的空文件

/dev/zero:零设备

行为类似文件,长度无限,但内容全为0

/dev/full:满设备

  • 行为类似文件,没有空闲的空间存储任何的数据
  • 对满设备的写入总是失败,并将errno设为ENOSPC

随机数设备

/dev/random和/dev/urandom:随机数设备

C语言的rand()函数生成伪随机数

随机数的设备原理

  • 人的行为无法预测,因而是随机的
  • Linux内核测量用户的输入活动,如键盘或鼠标操作的时间延时作为随机数

两者的不同

  • /dev/random:在用户没有输入的操作时,阻塞随机数读取进程(没有数据可以读取)
  • /dev/urandom:永不阻塞,在用户没有输入的操作时,生成伪随机数代替

设备访问与控制

设备访问

像文件一样操作设备

实例:

向并口设备发送数据

int fd = open("/dev/lp0", O_WRONLY);

write(fd,buffer,buffer_length);

close(fd);

控制硬件设备的函数:ioctl()

  • 第一个参数为文件描述符,指定想要控制的设备
  • 第二个参数为控制命令码,指定想要实施的操作
#include <fcntl.h>
#include <linux/cdrom.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h> int main(int argc, char *argv[])
{
int fd = open(argv[], O_RDONLY);//打开参数所表示的设备
ioctl(fd, CDROMEJECT);//弹出CD-ROM
close(fd);
return ;
}

C++学习笔记22:设备的更多相关文章

  1. Windows phone 8 学习笔记(7) 设备

    原文:Windows phone 8 学习笔记(7) 设备 本节主要涉及到 Windows phone 8 手机支持的各类设备,包括相机.设备状态,振动装置等.还有各类感应器,包括磁力计.加速度器和陀 ...

  2. CentOS学习笔记--SCSI 设备热插拔

    CentOS学习笔记--SCSI 设备热插拔 处于运行中的服务器,因业务要求也许不允许重启机器,而新添加的SCSI设备(主要是硬盘)如何实现热插拔呢? 首先需要查看一下设备: #cat /proc/s ...

  3. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...

  4. SQL反模式学习笔记22 伪键洁癖,整理数据

    目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...

  5. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  6. 【转】 树莓派学习笔记——I2C设备载入和速率设置

    原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i ...

  7. 树莓派学习笔记——I2C设备载入和速率设置

    原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c ...

  8. [原创]java WEB学习笔记22:MVC案例完整实践(part 3)---多个请求对应一个Servlet解析

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. ‎Cocos2d-x 学习笔记(22) TableView

    [Cocos2d-x 学习笔记 ]目录 1. 简介 TableView直接继承了ScrollView和ScrollViewDelegate.说明TableView能实现ScrollView拖动cont ...

随机推荐

  1. Android 反编译

    Android 反编译 步骤:1.下载apktool 工具,这一步 主要是反编译 xml 文件. 步骤:2 把xx.smali 文件转为java 工具 (单个) 图形界面 下载dex2jar  和xj ...

  2. 从零开始学iPhone开发(5)——使用MapKit

    (转)Leonbao:MapKit学习笔记 1.概述插入MapView,设置Delegate(一般为Controller),Annotations记录兴趣位置点(AnnotationView用来显示兴 ...

  3. Log4Net 配置SQL2008数据库 并传入自定义业务对象

    最近根据业务需要,俺们老大要求我们了解一个c#的组件——Log4Net 这玩意儿从来没弄过,感觉挺深奥的,结果经过2天的研究,还算小有所成吧,基本思路已经清晰明了了,不过过程中遇到一些很奇葩的问题,和 ...

  4. 简单SSM配置详解

    SSM:spring+springMVC+Mybatis 学习网友的http://www.cnblogs.com/invban/p/5133257.html,并对其进行了详细的解说. 源码下载:htt ...

  5. Windows Internals学习笔记(六)Windows关键系统组件

    参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...

  6. PHP-----数据类型,运算符

    文件解析流程: 基本语法: 和Javascript很像.Ps:变量名可以使用关键字,但是最好不建议使用.关于PHP和HTML的混编,写起来可能比较方便,但是不便于阅读. 数据类型: 其中的资源类型是一 ...

  7. c语言->和 .

    ->和 . 都是用于访问结构数据的符号. struct point { int x; int y; }; . 符号是在表达式中引用某个特定结构中的成员: 结构名.成员 例如: struct po ...

  8. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  9. Unity5 GI与PBS渲染从用法到着色代码

    http://www.cnblogs.com/zhouxin/p/5168632.html 本文主要介绍Untiy5以后的GI,PBS,以及光源探头,反射探头的用法以及在着色器代码中如何发挥作用,GI ...

  10. SQL convert datetime

    格式: CONVERT(data_type,expression[,style]) 说明: 此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarcha ...