欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符设备驱动接口——read、write

程序员文章站 2022-03-22 20:51:16
...

应用层read函数调用内核驱动中file_operations结构体里面的read函数接口

应用层write函数调用内核驱动中file_operations结构体里面的write函数接口

 

ssize_t read(int fd, void *buf, size_t count);

ssize_t write(int fd, const void *buf, size_t count);

 

ssize_t (*read) (struct file *filp, char __user *buf, size_t size, loff_t *off);

ssize_t (*write) (struct file *filp, const char __user *buf, size_t size, loff_t *off);

ssize_t demo_read(struct file *filp, char __user *buf, size_t size, loff_t *off)
{
	printk(KERN_INFO "---buf:%#x,size:%d---\n",buf,size);
	printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
	return 0;
}
ssize_t demo_write(struct file *filp, const char __user *buf, size_t size, loff_t *off)
{
	printk(KERN_INFO "---buf:%#x,size:%d---\n",buf,size);
	printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__);
	return 0;
}

 字符设备驱动接口——read、write

 

int copy_to_user(void __user *to, const void *from, int n);

功能:从内核层拷贝数据到用户层

参数:

@to 用户层数据缓存区地址

@from 内核层数据缓存区地址

@n 拷贝的字节数

返回值:成功返回0,失败返回错误码

int copy_from_user(void *to, const void __user *from, int n);

功能:从用户层拷贝数据到内核层

参数:

@to 内核层数据缓存区地址

@from 用户层数据缓存区地址

@n 拷贝的字节数

返回值:成功返回0,失败返回错误码

相关标签: 驱动程序