博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
file_operations中的 ioctrl
阅读量:4286 次
发布时间:2019-05-27

本文共 3008 字,大约阅读时间需要 10 分钟。

struct file_operations {
struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*read_iter) (struct kiocb *, struct iov_iter *); ssize_t (*write_iter) (struct kiocb *, struct iov_iter *); int (*iterate) (struct file *, struct dir_context *); unsigned int (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*mremap)(struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *, fl_owner_t id); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, loff_t, loff_t, int datasync); int (*aio_fsync) (struct kiocb *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*setlease)(struct file *, long, struct file_lock **, void **); long (*fallocate)(struct file *file, int mode, loff_t offset, loff_t len); void (*show_fdinfo)(struct seq_file *m, struct file *f);#ifndef CONFIG_MMU unsigned (*mmap_capabilities)(struct file *);#endif};
#include 
int ioctl(int d, int request, ...);long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

ioctl(fd, IOCGREG, &my_msg);        ret = copy_from_user(&msg, \            (struct msg __user *)arg, sizeof(my_msg));        if (ret)             return -EFAULT;        msg->data = read_reg(msg->addr);        ret = copy_to_user((struct msg __user *)arg, \                &msg, sizeof(my_msg));
3. 函数功能	1. 数据传输		内核->用户 // 大小由cmd 中 的第三个数值决定, 地址 为 unsigned long 参数,应该传个指针.		用户->内核	2. 命令交互		由cmd 的第二个数值和第一个数值决定4. 魔数打包_IO (魔数, 基数);_IOR (魔数, 基数, 变量型)_IOW  (魔数, 基数, 变量型)_IOWR (魔数, 基数,变量型 )#include "
"_IO(type,nr)_IOR(type,nr,size)_IOW(type,nr,size)_IOWR(type,nr,size)6.魔数拆包#include "
"_IOC_DIR(nr) // 这个是解压 读写属性 的 , R W RW_IOC_TYPE(nr)_IOC_NR(nr)_IOC_SIZE(nr)6. 返回值 返回0 正确Usually, on success zero is returned. A few ioctl() requests use the return value as an output parameter and return a nonnegative value on success. On error, -1 is returned, and errno is set appropriately. errno 怎么设置??

转载地址:http://wligi.baihongyu.com/

你可能感兴趣的文章
NESSUS扫描操作指导
查看>>
C语言读取文件大小,载入文件全部内容
查看>>
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>
C语言 文件操作的头文件
查看>>
C语言的常用库函数(dos)之四(dir.h文件下的一些函数)
查看>>
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
查看>>
防火墙报文转发流程
查看>>
以太坊创始人:17岁的亿万富翁养成记
查看>>
linux下IPTABLES配置详解
查看>>
关于iptables -m选项以及规则的理解
查看>>
linux系统中查看己设置iptables规则
查看>>
一些库函数的使用注意事项
查看>>
IPv6地址自动配置中的有状态(stateful)和无状态(stateless)的区别
查看>>
阿里云 ACP 云安全 题库 -- 数据库审计部分
查看>>
GC 回收机制
查看>>
探究 Android MVC、MVP、MVVM 的区别以及优缺点
查看>>
深入分析 Handler 内存泄露
查看>>
解决 windows 文件被占用的问题 -- The action can‘t be completed because the folder is open in another program
查看>>
Tencent/matrix错误:Cause: need sign apk but apksigner *\Sdk/build-tools/*/apksigner was not exist
查看>>