[英]How to print out the access right from linux kernel module
当我从终端运行命令 lsof 时,它将显示标题为 FD 的所有文件描述符的详细列表。 像 1u 这样的 FD 列号是实际的文件描述符,后跟 u,r,w 其模式为:
我的问题是如何从 linux 内核模块打印出这些类型的访问? 我可以打印files_path(见吸引的图片)。 我在这里看到文件结构中有f_mode并试图将其打印出来并收到大数字,例如 1208647709 或 917507
这是我的代码
struct task_struct *task_list;
struct fdtable * fdt = NULL;
unsigned int process_count = 0;
int fd_i;
char tmpbuf[256];
char * process_path = "";
struct path files_path;
unsigned int mode_path;
char *cwd;
for_each_process(task_list) {
pr_info("Process: %s\t PID:[%d]\t State:%s\n",
task_list->comm, task_list->pid,
get_task_state(task_list->state));
if (task_list->files == NULL) continue;
fdt = files_fdtable(task_list->files);
int i=0;
while(fdt->fd[i] != NULL) {
files_path = fdt->fd[i]->f_path;
mode_path = fdt->fd[i]->f_mode;
cwd = d_path(&files_path,buf,100*sizeof(char));
printk(KERN_INFO "Open file with fd %d %s **mode: %d**", i,cwd, mode_path);
i++;
}
}
有人可以审查并支持我解决这个问题吗? 提前致谢
Tsyvarev 的解决方案:使用 f_mode & (FMODE_READ | FMODE_WRITE) 提取两个标志。 然后切换该表达式的结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.