3233|0

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何通过ioctl 读写字符串?? [复制链接]

我要写一个驱动,要通过ioctl来传递字符串,(字符串的长度不知道,是变化的,字符串最大长度可以限制为512字节, 若用户写入的过多, 要求报错,不让其写入),
分别要求能在应用程序中,调用ioctl能来写入字符串, 和调用ioctl能来读出字符串. (通过两个命令CMD_SET, CMD_GET, 写入多少字符,读取多少字符,全由应用控制)
该怎么做啊?

我自己的一些思路及问题:

是定义一个结构体吗?

typedef struct _st_data
{
   int nLen;
   char *chrData;
} st_data;

那样的话,

#define CMD_SET _IOW('M', 0, st_data)
#define CMD_GET _IOR('M', 0, st_data)

(上面这两个定义对吗?)

写入时,应用侧定义好这样一个变量(mystdata),赋好值,然后调用 ioctl(fd, CMD_SET, &mystdata), 在驱动中,调用copy_from_user, 可从ioctl的arg中获得写入的字符串.

可是读取的时候,有点搞不懂了, 在ioctl的实现中,copy_to_user, 可是读的时候, 驱动并不知道这里该读多少长度??!!



还有弱弱地问一下,下面这样的代码对吗?
int test_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
      st_data *tmpstdata;

      .......
      switch(cmd)
      {
          case CMD_GET:
             tmpstdata = (st_data*) arg;    //***
             if (tmptdata->nLen > 0) {      //***
                     .....
             }
            
             copy_to_user(.....)
      }
}

上面注释为 //*** 的两行对不对呀? 是不是在没有copy_to_user()之前,不能这样操作? copy_to_user() 一定是要整个copy这个结构,而不能只copy这个结构中的 chrData 分量吧?

我刚开始学,很多不懂,望高人指点! 谢谢!
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表