初学LDD,请教个问题
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呢?
还请指教,感谢