C++学习笔记22:设备
设备类型
设备文件的性质
- 设备文件不是普通的磁盘文件
- 读写设备的数据需要与相应的设备驱动器通信
设备文件的类型
- 字符设备:读写串行数据字节流,如串口、终端等
- 块设备:随机读写固定尺寸数据块,如磁盘设备
说明
- 磁盘挂载到文件系统后,使用文件和目录模式操作
- 程序一般不使用块设备,内核实现文件系统时使用块设备操作文件
设备号
大设备号(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:设备的更多相关文章
- Windows phone 8 学习笔记(7) 设备
原文:Windows phone 8 学习笔记(7) 设备 本节主要涉及到 Windows phone 8 手机支持的各类设备,包括相机.设备状态,振动装置等.还有各类感应器,包括磁力计.加速度器和陀 ...
- CentOS学习笔记--SCSI 设备热插拔
CentOS学习笔记--SCSI 设备热插拔 处于运行中的服务器,因业务要求也许不允许重启机器,而新添加的SCSI设备(主要是硬盘)如何实现热插拔呢? 首先需要查看一下设备: #cat /proc/s ...
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...
- SQL反模式学习笔记22 伪键洁癖,整理数据
目标:整理数据,使不连续的主键Id数据记录变的连续. 反模式:填充断档的数据空缺. 1.不按照顺序分配编号 在插入新行时,通过遍历表,找到的第一个未分配的主键编号分配给新行,来代替原来自动分配的伪主键 ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- 【转】 树莓派学习笔记——I2C设备载入和速率设置
原文网址:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i ...
- 树莓派学习笔记——I2C设备载入和速率设置
原文:http://blog.csdn.net/xukai871105/article/details/18234075 1.载入设备 方法1——临时载入设备 sudo modprobe -r i2c ...
- [原创]java WEB学习笔记22:MVC案例完整实践(part 3)---多个请求对应一个Servlet解析
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Cocos2d-x 学习笔记(22) TableView
[Cocos2d-x 学习笔记 ]目录 1. 简介 TableView直接继承了ScrollView和ScrollViewDelegate.说明TableView能实现ScrollView拖动cont ...
随机推荐
- [问题2014A05] 复旦高等代数 I(14级)每周一题(第七教学周)
[问题2014A05] (1) 设 \(x_1,x_2\cdots,x_n,x\) 都是未定元, \(s_k=x_1^k+x_2^k+\cdots+x_n^k\,(k\geq 1)\), \(s_0 ...
- 微信小程序配置文件
app.json 配置文件中不能有注释 { "pages": [ // 必填 设置页面路径 "pages/index/index", "pages ...
- Fact表的星型结构
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- centos配置163源
1.参考Centos镜像帮助 (1.1)备份原始repo shell> sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Ce ...
- nodejs 访问mysql
安装 $ npm install mysql 简介 这个一个mysql的nodejs版本的驱动,是用JavaScript来编写的.不需要编译 这儿有个例子来示范如何使用: var mysql = re ...
- 转:画图解释 SQL join 语句
画图解释 SQL join 语句 我认为 Ligaya Turmelle 的关于SQL联合(join)语句的帖子对于新手开发者来说是份很好的材料.SQL 联合语句好像是基于集合的,用韦恩图来解释咋一看 ...
- Linux 控制 配置 减少 交换分区 SWAP 虚拟内存使用
对于某些大型应用来说,SWAP 严重影响性能,尽可能避免使用: The Linux kernel provides a tweakable setting that controls how ofte ...
- 关于tomcat会在url末尾自动追加斜杠(/)
今天,突然发现一个问题, 比如我的请求路径为 http://ip:port/my_project/myapp, 在浏览器中敲入这个地址,然后会显示 http://ip:port/my_project ...
- hessian 协议
什么是Hessian协议呢? 目前,Web服务技术是解决异构平台系统的集成及互操作问题的主流技术. 它所基于的XML已经是Internet上交换数据的实际标准,基于通用的进程间通信协议和网络传输协议屏 ...
- css——手机端图片正确显示
这两天遇到的问题汇总(一): 1.图片在app端显示有差异:如下 左边图片是:图片显示太大,以至于让整个页面都失真的效果:右边是调好样式之后的效果,知道增 ...