- 论坛徽章:
- 0
|
驱动是这样的:- static ssize_t overload_write(struct file *filp, const char __user *buf, size_t count, loff_t *offp)
- {
- unsigned char ary[100] = "";
- unsigned long len = min(count, sizeof(ary)); //min是个宏,用来获取两个数中较小的值
- int retval;
-
- dem_dbg("[kern func]: %s major: %d minor: %d\n",
- __FUNCTION__, imajor(filp->f_dentry->d_inode),
- iminor(filp->f_dentry->d_inode));
-
- if(copy_from_user(ary, buf, len) != 0){
- retval = -EFAULT;
- goto cp_err;
- }
-
- printk("[msg]: writing context: %s\n",ary);
-
- return len; //成功返回实际传输的字节数
- cp_err:
- return retval;
- }
-
- static ssize_t overload_read (struct file *filp, char __user *buf, size_t count, loff_t *offp)
- {
- unsigned char ary[100] = "you are reading successfully!";
- unsigned long len = min(count, sizeof(ary)); //min是个宏,用来获取两个数中较小的值
- int retval;
-
- dem_dbg("[kern func]: %s major: %d minor: %d\n",
- __FUNCTION__, imajor(filp->f_dentry->d_inode),
- iminor(filp->f_dentry->d_inode));
-
- if(copy_to_user(buf, ary, len) != 0){
- retval = -EFAULT;
- goto cp_err;
- }
-
- return len; //成功返回实际传输的字节数
- cp_err:
- return retval;
- }
复制代码 应用层是这样的:- //成功返回实际写入字节数,失败返回负值
- retval = write(fd1, buf1, strlen(buf1)+1);
- if(retval < 0){
- perror("writing fd1 failed!");
- goto out;
- }
- printf("<user space>: write bytes: %d write content: %s\n", retval, buf1);
-
- //成功返回实际读取字节数,失败返回负值
- retval = read(fd1, buf2, sizeof(buf2));
- if(retval < 0){
- perror("reading fd1 failed!");
- goto out;
- }
- printf("<user space>: read bytes: %d read content: %s\n", retval, buf2);
复制代码 打印出来的是;- [kern func]: overload_write major: 16 minor: 65793
- [msg]: writing context: I am a test program!
- [kern func]: overload_read major: 16 minor: 65793
- [msg]: reading is nonblock mode!
- <user space>: write bytes: 21 write content: I am a test program!
- <user space>: read bytes: 100 read content: you are reading successfully!
复制代码 为什么是驱动的读与写的函数都打印出来了 应用层才打印呢!!! |
|