zoukankan      html  css  js  c++  java
  • ioctl

    ioctl是设备驱动程序中对设备的I/O通道进行管理的函数

    int ioctl(int fd, int cmd, …)

    fd:用户程序打开设备时返回的文件标示符
    cmd:用户程序对设备的控制命令

    定义格式

    | 设备类型| 序列号| 方向 |数据尺寸|
    |---------|-------|------|--------|
    |  8 bit  | 8 bit |2 bit |8~14 bit|
    |---------|-------|------|--------|

    宏头文件

    asm/ioctl.h

    宏注释

    #define _IOC_SIZEBITS 14 //大小(size)字段的字位宽度,14bits
    #define _IOC_NRBITS   8  //序数(number)字段的字位宽度,8bits
    #define _IOC_TYPEBITS 8  //幻数(type)字段的字位宽度,8bits
    
    #define _IOC_DIRSHIFT  (_IOC_SIZESHIFT+_IOC_SIZEBITS) //16+14
    #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) //0+8
    #define _IOC_NRSHIFT   0 //0
    #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) //8+8
    
    #define _IOC(dir, type, nr, size) 
    (((dir) << _IOC_DIRSHIFT) | 
    ((type) << _IOC_TYPESHIFT) | 
    ((nr) << _IOC_NRSHIFT) | 
    ((size) << _IOC_SIZESHIFT))
    
    #define _IOC_NONE 0U    //没有数据传输
    #define _IOC_WRITE 1U   //向设备写入数据
    #define _IOC_READ 2U    //从设备中读取数据
    
    #define _IO(type,nr) _IOC(_IOC_NONE, (type), (nr), 0)
    #define _IOR(type,nr,size) _IOC(_IOC_READ, (type), (nr), sizeof(size))
    #define _IOW(type,nr,size) _IOC(_IOC_WRITE, (type), (nr), sizeof(size))
    #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), sizeof(size))

    type(魔数): 魔数范围为 0~255 。通常,用英文字符 “A” ~ “Z” 或者 “a” ~ “z” 来表示。不同的设备驱动程序最好设置不同的魔数,但并不是要求绝对,也是可以使用其他设备驱动程序已用过的魔数
    nr(序列号):通常,从 0开始递增,相同设备驱动程序上可以重复使用该值。例如,读取和写入命令中使用了相同的基数,设备驱动程序也能分辨出来
    size(变量型):变量或者是变量的类型

    cmd组成

    _IOC(dir, type, nr, size)
    _IO(type, nr)   //简单方法

    举例

    #define NEWCHAR_IOC_MAGIC   'M'
    #define NEWCHAR_SET    _IO(NEWCHAR_IOC_MAGIC, 0)
    #define NEWCHAR_GET    _IO(NEWCHAR_IOC_MAGIC, 1)
    #define NEWCHAR_IOC_MAXNR   1
  • 相关阅读:
    Prommetheus 插件监控 ES
    Linux LVM条带化
    MYSQL wait_timeout以及connect_timeout.这两个有什么区别
    alertmanager配置文件说明(转载)
    腾讯云MongoDB: skip查询内核优化(转载)
    MongoDB主从复制介绍和常见问题说明(转载)
    MongoDB 批量更新、批量新增、批量删除、批量替换 —— bulkWrite操作
    MongoDB Cluster 数据平衡优化
    MongoDB副本集提高读写速率
    Postgresql中时间戳与日期的相互转换(同样适用于GreenPlum)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709819.html
Copyright © 2011-2022 走看看