当前位置:  技术问答>linux和unix

如何用ioctl 读写字符串??

    来源: 互联网  发布时间:2016-02-22

    本文导语:  我要写一个驱动,要通过ioctl来传递字符串,(字符串的长度不知道,是变化的,字符串最大长度可以限制为512字节, 若用户写入的过多, 要求报错,不让其写入), 分别要求能在应用程序中,调用ioctl能来写入字符串, 和调用ioct...

我要写一个驱动,要通过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 分量吧?

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

|
ioctl最好别传字符串..因为那样降低很多效率,同时容易出错,违背了ioctl的简易性

“我要写一个驱动,要通过ioctl来传递字符串”

最好用read()实现,如果有多个可以用ioctl()修改驱动的标志,再调用read()区分

|
建议看一下


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 字符设备ioctl传参问题
  • 内核执行ioctl时会被其他的ioctl打断吗
  • 用户程序的ioctl是怎么和驱动程序中的ioctl实现联系
  • win内核驱动漏洞挖掘 IOCTL Fuzzer
  • ioctl调用的问题
  • 菜鸟问题:Linux下 ioctl 函数到底在哪?
  • 求助:ioctl函数的命令参数
  • system()调用 与 ioctl()调用
  • ioctl() 到底有什么作用??
  • ioctl()函数
  • ioctl執行的奇怪問題
  • 关于linux内核的ioctl函数,请高手指点一下
  • 请教一个关于Makefile的问题。提示出错:make: *** 没有规则可以创建“ioctl”需要的目标“gcc”。 停止。
  • ioctl&fcntl 函数的区别
  • 关于ioctl
  • 请教一个ioctl函数的参数问题
  • 给错误设备发送正确命令 -- ioctl问题
  • ioctl返回的地址问题?初学者,高人指点。
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • 用ioctl修改网卡接口eth0的ip地址的问题,请~
  • ioctl函数的用法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3