免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2232 | 回复: 5
打印 上一主题 下一主题

[函数] 这样可以实现吗?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-17 22:44 |只看该作者 |倒序浏览
mknod /dev/memory c 88 0
创建一个设备
然后自己写驱动注册这个设备, 用struct file_operations 结构来调用write read函数实现echo abc>/dev/memory ,这个可以很好实现,
但是不明白为什么实现不了echo abc >>/dev/memory

  1. /* access functions */
  2. struct file_operations memory_fops = {
  3.   read: memory_read,
  4.   write: memory_write,
  5.   open: memory_open,
  6.   release: memory_release
  7. };

  8. ssize_t memory_write( struct file *filp,const char *buf,
  9.                               size_t count, loff_t *f_pos)
  10. {
  11.     unsigned long liret = -1;
  12.     size_t linum = count > BUFF_SIZE? BUFF_SIZE : count;
  13.     //liret = copy_from_user(memory_buffer,tmp,1);
  14.     if(*f_pos == 0)
  15.     {
  16.         liret = copy_from_user(memory_buffer,buf, linum);
  17.         printk(KERN_EMERG "memory_write->if\n");
  18.     }
  19.     else
  20.     {
  21.         liret = copy_from_user(memory_buffer + strlen(memory_buffer), buf, linum - strlen(memory_buffer));
  22.         printk(KERN_EMERG "memory_write->else\n");
  23.     }
  24.     printk(KERN_EMERG "memory_write count:%d\n",  count);

  25.     return linum;
  26. }
复制代码
多谢了

论坛徽章:
0
2 [报告]
发表于 2011-02-18 09:43 |只看该作者
本帖最后由 linyunxian 于 2011-02-20 13:06 编辑

需要做两部分
memory_open 的时候判断读写标志,如是否append模式。
memory_write 的时候维护自身的一个读写缓冲区。
这不是通过f_pos来确定的。

论坛徽章:
0
3 [报告]
发表于 2011-02-18 21:31 |只看该作者
回复 2# linyunxian


    不是通过f_pos,那怎么判断是>>还是>呢?

论坛徽章:
0
4 [报告]
发表于 2011-02-18 23:14 |只看该作者
回复  linyunxian


    不是通过f_pos,那怎么判断是>>还是>呢?
chary8088 发表于 2011-02-18 21:31



   " >>还是>“是shell做的,shell fork的子进程只管写

论坛徽章:
0
5 [报告]
发表于 2011-02-19 21:01 |只看该作者
回复 4# baozhao


    我是问怎么在驱动里面怎么知道是>还是>>

论坛徽章:
0
6 [报告]
发表于 2011-02-19 22:30 |只看该作者
回复 5# chary8088


    在内核是无法知道的,你的模块只是提供系统调用的对应实现而已。 你的问题可能是对open 的APPEND方式支持不够
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP