如何解决如何正确读写 Linux 字符设备?
我正在编写自己的加密和解密字符设备。用户将他的密钥写入/dev/cipher_key,然后将他想要加密的内容写入/dev/cipher。问题是他要加密的内容可能很大。假设他写了 24KB。根据我的理解,这将导致多次调用 write 函数,因为内核写入缓冲区远小于 24KB。
如何正确写入缓冲区,以便多次调用 write 不会覆盖缓冲区的内容?
大多数在线实现直接使用 copy_from_user() 到缓冲区。这在未来有 24KB 或更多的情况下会起作用吗? 我可以只使用 SEQ_WRITE 和 SEQ_READ 来处理这些操作吗?如果没有,为什么不呢?
我在一本书下面找到了这个函数,我不知道在 BUF_LEN 未知的情况下如何工作?如何确定内核缓冲区长度?还是 BUF_LEN 对应于我的缓冲区的大小而不是内核的缓冲区?
static ssize_t chrdev_write(struct file *filp,const char __user *buf,size_t count,loff_t *ppos)
{
int ret;
pr_info("should write %ld bytes (*ppos=%lld)\n",count,*ppos);
/* Check for end-of-buffer */
if (*ppos + count >= BUF_LEN) //How do I know the kernel buffer length?
count = BUF_LEN - *ppos;
/* Get data from the user space */
ret = copy_from_user(chrdev_buf + *ppos,buf,count);
if (ret < 0)
return -EFAULT;
*ppos += count;
pr_info("got %ld bytes (*ppos=%lld)\n",*ppos);
return count;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。