mode_t f_mode:文件模式(FMODE_WRITE,FMODE_READ),用在创建文件时使用
它通过FMODE_READ和FMODE_WRITE位来标识文件是否可读或可写,因为内核在调用驱动程序的read和write前已经检查了訪问权限。所以不必为这两个方法检查权限。在没有获得相应訪问权限而打开文件的情况下,对文件的读写操作将被内核拒绝,驱动程序无需为此而作额外的推断。
unsigned int f_flags:文件标志,用在文件本身已存在,指定打开该文件的方式
如O_RDONLY/O_NONBLOCK/O_SYNC。为了检查用户请求是否是非堵塞式的操作。驱动程序须要检查O_NONBLOCK标志,而其它标志非常少用到。
注意,检查读/写权限应该查看f_mode而不是f_flags。
全部这些标志都定义在< linux/fcntl.h >
文件读/写模式 mode
、标志 f_flags
都是设备驱动关心的内容,而私有数据指针private_data
在设备驱动中被广泛应用,大多被指向设备驱动自定义用于描述设备的结构体。
检测用户打开文件的读写方式
驱动程序中经常会使用如下类似的代码来检测用户打开文件的读写方式。
if (file->f_mode & FMODE_WRITE) //用户要求可写
{
}
if (file->f_mode & FMODE_READ) //用户要求可读
{
}
下面的代码可用于判断以阻塞还是非阻塞方式打开设备文件。
if (file->f_flags & O_NONBLOCK) //非阻塞
pr_debug("open: non-blocking\n");
else //阻塞
pr_debug("open: blocking\n");