zoukankan      html  css  js  c++  java
  • 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[1], O_RDONLY);//打开参数所表示的设备
        ioctl(fd, CDROMEJECT);//弹出CD-ROM
        close(fd);
        return 0;
    }
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    Dell Optiplex 330上Windows 7激活方法与工具
    了解控制器、控制器操作和操作结果
    [转]为C# Windows服务添加安装程序
    前段时间晚上回家不想看电视了,就做了个网站
    MSSQL 2008里事务的一个问题
    关于JavaScript解析XML的性能的问题(已解决)
    自己做了一个教育的网站
    Windows 7下安装SQL Server 2005过程详解
    (转)C#学习基础概念二十五问
    了解模型、视图和控制器
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6231269.html
Copyright © 2011-2022 走看看