社区
Linux_Kernel
帖子详情
ioctl与read/write的两难境地
footway
2006-12-15 10:37:19
ioctl只能控制,不能读回信息;
read/write读写,但linux不赞同直接引用指针。说是为内核的安全着想。
那写一个字符设备的驱动,该怎么办?
传递一个字符串,算不算直接引用指针啊?
求助!help!
...全文
582
9
打赏
收藏
ioctl与read/write的两难境地
ioctl只能控制,不能读回信息; read/write读写,但linux不赞同直接引用指针。说是为内核的安全着想。 那写一个字符设备的驱动,该怎么办? 传递一个字符串,算不算直接引用指针啊? 求助!help!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
footway
2006-12-21
打赏
举报
回复
看了LDD3,书中一般推荐access_ok后用copy_from_user。
不过,有些实例并没有经access_ok,直接用copy_from_user。
joyself
2006-12-17
打赏
举报
回复
同意楼上的,我觉得应该先看看LDD3再思考一下你的问题是不是已经有答案,或者有更好的问法
playmud
2006-12-16
打赏
举报
回复
ioctl可以读回信息,看你怎么写的驱动了;
jacky_emdoor
2006-12-15
打赏
举报
回复
copy_from_user
footway
2006-12-15
打赏
举报
回复
put_user怎么用呀?
有没有实例啊?
谢谢...
无知者无谓
2006-12-15
打赏
举报
回复
bit_write(i, buf[i]); //直接引用指针?→是的
从内核到用户态的内存拷贝要用put_user
footway
2006-12-15
打赏
举报
回复
比如说:
static ssize_t
io_write(struct file *file, const char *buf, size_t count, loff_t *offset)
{
size_t i=count;
for (; i>0; i--)
{
bit_write(i, buf[i]); //直接引用指针?
}
}
传递一个字符串,一个byte一个byte地从io口输出。
月吻长河
2006-12-15
打赏
举报
回复
用copy_from_user
footway
2006-12-15
打赏
举报
回复
能不能这样?
static ssize_t
io_write(struct file *file, const char *buf, size_t count, loff_t *offset)
{
char *knl_buff;
copy_from_user( &knl_buff[len], buff, len );
Linux设备驱动程序中常用的
ioctl
方法和
read
/
write
方法的异同点
ioctl
是iocontrol的缩写,就是IO控制。 行为上: 简单来说,如果你在写驱动程序时zhi候,碰到一些IO操作,在逻辑上不能归类到
read
,不能归类到
write
,那就可以认为是
ioctl
的部分。
read
和
write
应该是写入和读出数据的,应该是作为单纯的数据交换的方式来处理。而
ioctl
则是控制
read
和
write
一些选项的。比如:你做了一个通用的读写IO端口的驱动模块。
read
和
write
是从端口读写数据的,但是更改读写的端口,这个操作应该如何处理呢?显然用
ioctl
来实现比较合理。比如你的re
ioctl
与
write
Linux
ioctl
与
write
read
和
write
以及ioctrl的在驱动中传递数据的区别、特点
read
和
write
以及ioctrl的在驱动中传递数据的区别、特点
ioctl
时常常跟
read
,
write
混淆
http://www.cnblogs.com/huangxingkezhan/archive/2012/12/25/2832655.html 在学习
ioctl
时常常跟
read
,
write
混淆。其实
ioctl
是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。 而
read
,
write
是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收
Linux下的
ioctl
接口介绍及其应用
ioctl
接口也叫做unlocked_
ioctl
接口。 unlocked_
ioctl
和
read
/
write
函数的异同点: 相同点:都可以往内核中写数据。 不同点:
read
函数只能完成读的功能,
write
函数只能完成写的功能,
ioctl
既可以读也可以写,但在读取大数据时,
ioctl
的效率不及
read
/
write
函数。
Linux_Kernel
4,441
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章