1、file_operations结构
include/linux/fs.h
struct file_operations{
我认为的常用部分:
struct module * owner;
loff_t (*llseek) (struct file*, loff_t, int);
ssize_t (*read) (struct file*, char *, size_t, loff_t *);
ssize_t (*write) (struct file*, const char *, size_t, loff_t *);
int (*ioctl) (struct inode*, struct file*, unsigned int, unsigned long);
int (*open) (struct inode*, struct file*);
int (*release) (struct inode*, struct file*);
...
}
2、file结构
include/linux/fs.h
struct file{
我认为常用部分
mode_t f_mode;
unsigned int f_flags;
loff_tf ops;
struct file_operations *f_op;
void *private_data;
}
说明:
f_mode 该成员表示文件的读写权e限,由FMODE_READ和FMODE_WRITE标识。驱动程序的ioctl()方法需要查看这个域来检查读/写权限。由于内核在调用驱动程序的read()和write()方法前已经检查了权限,因此read()方法和write()方法无需检查读/写权限。
f_ops 该成员表示文件的当前读/写位置。驱动程序可以直接读写该字段。
f_flags 该成员是文件标志。标志O_NONBLOCK表示是否是请求非阻塞型操作,可由驱动程序检查。其他标志很少使用。
f_inode 该成员是设备文件所对应的i节点。驱动程序除了可以通过该字段获取从设备号外,一般很少使用。
f_op 该成员表示与文件关联的操作。
private_data 驱动程序可以将这个字段用于任意目的或者简单忽略这个字段。驱动程序可用这个字段指向已经分配的数据,但一定要在内核释放file结构前的release()方法中清除它。