gpt4 book ai didi

linux - 驱动程序编程 : cat command not showing output

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:56 25 4
gpt4 key购买 nike

我是驱动编程的新手,我写了一个简单的字符设备驱动代码。当我在不使用指针的情况下编写它时,它崩溃了。

当使用 echo 写入驱动程序时,它可以工作。但是从中读取时,没有输出。有人请帮忙。文件操作部分代码如下所示。 'p' 和 'q' 是普通字符指针。 'max' 值设置为 10。'ptr' 是初始化为 '0' 的静态 int 类型。

int my_open(struct inode *inode,struct file *filp)
{
printk("In open.\n");
if((filp->f_flags & O_ACCMODE) == O_WRONLY){
p = (char *)buffer;
ptr = 0;
}
else if((filp->f_flags & O_ACCMODE) == O_RDONLY)
q = (char *)buffer;

return 0;
}

int my_close(struct inode *inode,struct file *filp)
{
printk("In close.\n");
return 0;
}

ssize_t my_read(struct file *filp,char *buff,size_t count,loff_t *pos)
{
long ret;
printk("In read.\n");
ret = copy_to_user(buff,q,max);
q += max;
*pos += max;

if(ptr -= max)
return max;
else
return 0;
}

ssize_t my_write(struct file *filp,const char *buff,size_t count,loff_t *pos)
{
long ret;
printk("In write.\n");
ret = copy_from_user(p,buff,max);
p += max;
*pos += max;
ptr += max;
return max;
}

module_init(my_init);
module_exit(my_exit);

最佳答案

在读和写中你都没有考虑“count”参数,因为你的代码似乎假设“count>=max”,这是不能保证的。这本身可能会在执行读取的过程中导致任何类型的麻烦。此外,您在检查当前读取或写入位置是否超过缓冲区限制之前复制到/来自用户。此外,赋值/测试 if (ptr -= max) 仅在 ptr 恰好等于 max 时有效,也不能保证您多次执行读取。

注意:由于缺少 p、q、buffer、ptr 和 max 的定义,我假设它们看起来像:

static char *p;
static char *q;
statint int ptr = 0;
static char buffer[10];
static int max=10;

关于linux - 驱动程序编程 : cat command not showing output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512553/

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