gpt4 book ai didi

linux - 使用 Linux 字符设备驱动程序的 'write' 函数中的参数之一

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:19 24 4
gpt4 key购买 nike

我是一名学生,正在尝试学习Linux字符设备驱动程序。我一直在关注写为 here 的教程经过一些修改。该驱动程序的读写系统调用仅在字符缓冲区上进行读写。问题是,在我看来,参数 loff_t *off 在不应该这样做时改变了它的值。我的意思是,如果你看到下一段代码。

static ssize_t my_write(struct file *f, const char __user *buf,
size_t len, loff_t *off){
int i;
char byte;
printk(KERN_INFO "Driver: write()\n");
printk(KERN_INFO "1. The value of *off is:%i\n",*off);
if (*off >= (BUFFER_SIZE - 1)){
return 0;
}
printk(KERN_INFO "2. The value of *off is:%i\n",*off);
if ((*off + len) > (BUFFER_SIZE - 1)){
len = BUFFER_SIZE - 1 - *off;
}
printk(KERN_INFO "3. The value of *off is:%i\n",*off);
for (i = 0; i < len; i++){
if (copy_from_user(&byte, buf + i, 1)){
return -EFAULT;
}
c[i]=byte;
}
printk(KERN_INFO "4. The value of *off is:%i\n",*off);
c[len]='\n';
*off += len;
printk(KERN_INFO "5. The value of *off is:%i\n",*off);
return len;
}

控制台上 printk 调用的结果是:

  1. *off 的值为:0
  2. *off 的值为:-1
  3. *off 的值为:0
  4. *off 的值为:693260
  5. *off 的值为:-2132049164

你能告诉我为什么吗?谢谢。

最佳答案

摘自第 3 章:LDD 中的字符驱动程序...

off 是一个指向“长偏移类型”对象的指针,该对象指示用户正在访问的文件位置。

无论方法传输多少数据量,它们通常都应该更新*offp 处的文件位置表示成功完成后的当前文件位置系统调用。

有关详细信息,请参阅 https://lwn.net/images/pdf/LDD3/ch03.pdf 中的图 3-2

关于linux - 使用 Linux 字符设备驱动程序的 'write' 函数中的参数之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com