Linux操作方法集接口(read,write)

简介: Linux操作方法集接口(read,write)

一:read,write

<asm-generic/uaccess.h>
应用层调用 read —>>> 应用层想读取数据 —>>> 这件事情是内核中驱动完成
—>>> copy_to_user
应用层调用 write —>>> 应用层想写取数据 —>>> 这件事情是内核中驱动完成
—>>> copy_from_user


20200227203829342.png

20200227203900246.png


//驱动中的read、write接口实现
ssize_t demo_read(struct file *filp, char __user *buf, size_t size, loff_t *off){ 
if(size > kbufcount)
{   
size = kbufcount; 
} if(copy_to_user(buf, k_buf, size)){   
printk(KERN_ERR "copy_to_user failed...\n");    
return -EAGAIN; 
} 
kbufcount = 0;  
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__); 
return size;}ssize_t demo_write(struct file *filp, const char __user *buf, size_t size, loff_t *off){ 
if(size > KBUFSIZE-1){    
size = KBUFSIZE-1;  
} 
if(copy_from_user(k_buf,buf, size)){    
printk(KERN_ERR "copy_from_user failed...\n");    
return -EAGAIN; 
}
kbufcount = size; 
printk(KERN_INFO "demo_write->copy_from_user:%s\n",k_buf);    
printk(KERN_DEBUG "---%s---%s---%d---\n",__FILE__,__func__,__LINE__); 
return size;
}
//应用层测试代码char buf[] = "aaaaaaaaaaaaa";
char r_buf[32];
int main(int argc, const char *argv[]){    int fd = open("/dev/cdev_demo2",O_RDWR);    
if(fd < 0){       
perror("open");        
return -1;    
}
write(fd,buf,strlen(buf));                                                                                                                              close(fd);
    return 0;}
目录
打赏
0
0
0
0
1
分享
相关文章
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
69 34
Linux内核驱动程序接口 【ChatGPT】
Linux内核驱动程序接口 【ChatGPT】
在Linux中,如何查看网络接口的状态?
在Linux中,如何查看网络接口的状态?
Linux网络接口配置不当所带来的影响
总而言之,Linux网络接口的恰当配置是保证网络稳定性、性能和安全性的基础。通过遵循最佳实践和定期维护,可以最大程度地减少配置错误带来的负面影响。
228 0
Linux PWM接口概述 【ChatGPT】
Linux PWM接口概述 【ChatGPT】
|
7月前
|
【linux】【驱动】phy接口类型
【linux】【驱动】phy接口类型
41 0
在Linux中,什么是网络接口配置?如何配置IP地址?
在Linux中,什么是网络接口配置?如何配置IP地址?
在Linux中,如何查看和修改网络接口配置?
在Linux中,如何查看和修改网络接口配置?
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等