初学LDD,请教个问题

wuchengwei1119 2017-01-06 04:56:29
write函数的实现如下:
static ssize_t ucdev_write(struct file *filp, const char __user *buf, size_t size, loff_t *offp) {
struct ucdev *ucdev = (struct ucdev *)filp->private_data;
debug("trace, write size = %d\n", size);
debug("before write, *offp = %lld, data = %s\n", *offp, ucdev->data);

if (*offp + size > ucdev->size) {
size = ucdev->size - *offp;
}

if(copy_from_user(ucdev->data+*offp, buf, size)) {
error("copy_from_user return fail\n");
return -EFAULT;
}

*offp += size;
debug("after write, *offp = %lld, data = %s\n", *offp, ucdev->data);
return size;
}


测试结果:
root@robotxy_android_dev:~# echo "hello" >>/dev/ucdev3
root@robotxy_android_dev:~# echo "hello" >>/dev/ucdev3
root@robotxy_android_dev:~# dmesg
[84722.398974] ucdev_write 73: trace, write size = 6
[84722.398981] ucdev_write 74: before write, *offp = 0, data =
[84722.398982] ucdev_write 86: after write, *offp = 6, data = hello
[84722.398982]
[84724.355031] ucdev_write 73: trace, write size = 6
[84724.355038] ucdev_write 74: before write, *offp = 0, data = hello
[84724.355038]
[84724.355039] ucdev_write 86: after write, *offp = 6, data = hello
[84724.355039]
root@robotxy_android_dev:~#


小弟是用追加模式写入device的,为什么第二次echo的时候,写入的位置还是0呢?

还请指教,感谢

...全文
985 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2017-05-02
  • 打赏
  • 举报
回复
简单的理解为字符设备文件没有(字节)偏移的概念。
zs_2016 2017-04-26
  • 打赏
  • 举报
回复
追加是说你open一次,当前fd下追加; 猜测,echo一次,open一次,echo两次,会持有两个不同的fd。 假如让你实现echo,想想你会怎么实现。

1,319

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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