Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161919
  • 博文数量: 40
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-27 18:05
文章分类
文章存档

2011年(1)

2010年(9)

2009年(16)

2008年(14)

我的朋友

分类: LINUX

2008-12-05 17:48:07

ioctl 接口
linux/ioctl.h
1.
int ioctl(int fd, unsigned long cmd, ...);
//在用户空间
int (*ioctl) (struct inode *inode, struct file *filp,
unsigned int cmd, //命令
unsigned long arg//参数
);
//内核空间
 
2.ioctl 命令
            预定义的命令 和 自定义命令
            预定义的命令:内核能够识别,且在你的文件操作被调用之前被操作,例如:FIOCLEX,
                        FIONCLEX,FIOQSIZE,FIONBIO
3.ioctl命令操作
 ioctl 命令4 个位段
type           魔数,8 位宽(_IOC_TYPEBITS).
number         顺序号. 8 位(_IOC_NRBITS)宽
direction     数据传送的方向,_IOC_NONE(没有数据传输), _IOC_READ(从设备读), _IOC_WRITE,
                和 _IOC_READ|_IOC_WRITE (数据在2个方向被传送).
size           用户数据的大小
 
建立命令(type魔数,nr顺序号 datatype数据类型)
IO(type,nr)(
//给没有参数的命令
_IOR(type, nr, datatype)
//从驱动中读数据的
_IOW(type,nr,datatype)
//写数据
_IOWR(type,nr,datatype)
//双向传送
 
分解命令(nr为命令)
_IOC_DIR(nr)  数据传送的方向
_IOC_TYPE(nr)  魔数
_IOC_NR(nr)  顺序号
_IOC_SIZE(nr)  数据的大小
阅读(1225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~