ioctl与read/write的两难境地

footway 2006-12-15 10:37:19
ioctl只能控制,不能读回信息;
read/write读写,但linux不赞同直接引用指针。说是为内核的安全着想。

那写一个字符设备的驱动,该怎么办?
传递一个字符串,算不算直接引用指针啊?

求助!help!
...全文
582 9 打赏 收藏 转发到动态 举报
写回复
用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 );

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧