linux命令码(_IO宏)

本文详细介绍了Linux系统中ioctl命令码的结构,包括32位整型数的各个位段含义,如方向、数据大小和设备类型等。特别讨论了第29位的特殊性,以及无方向时数据大小的表示。此外,还简述了ioctl命令码的正确使用方法。
摘要由CSDN通过智能技术生成

在ioctl.h头文件中定义了命令码

命令码用一个32位的整型数表达

bit29~31表示命令传输的方向,bit16~29记录要传输的数据的大小,bit8~15表示设备类型(一般用一个ASCII表示),bit0~7表示命令编号

其中数据大小可以和方向的bit29重叠

29位是特殊位,因为无方向定义值为1也就是无方向的时候会占用第29位,无方向就无所谓数据传输,所以携带数据大小段是0
有方向时候方向位不会占用29位所以数据大小占用29位是不影响的


 

#ifndef _SPARC_IOCTL_H
#define _SPARC_IOCTL_H

#define _IOC_NRBITS      8	//命令
#define _IOC_TYPEBITS    8	//设备类型
#define _IOC_SIZEBITS   13	/* Actually 14, see below. */	//数据大小
#define _IOC_DIRBITS     3	//方向

#define _IOC_NRMASK      ((1 << _IOC_NRBITS)-1)	//命令掩码	0x000000FF
#define _IOC_TYPEMASK    ((1 << _IOC_TYPEBITS)-1)	//设备类型掩码	0x000000FF
#define _IOC_SIZEMASK    ((1 << _IOC_SIZEBITS)-1)	//数据大小掩码	0x00000FFF
#define _IOC_XSIZEMASK   ((1 << (_IOC_SIZEBITS+1))-1)	//数据大小掩码	0x00001FFF
#define _IOC_DIRMASK     ((1 << _IOC_DIRBITS)-1)	//方向
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值