怎么从文件描述符知道文件路径??
时间:2010-07-15
来源:互联网
拦截系统调用的操作
如果是OPEN:
asmlinkage long sys_open(const char __user *filename,int flags, int mode);
有filename这个参数,我代码里直接if(filename判断一下是不是等于某个指定文件),就可以做到指定文件打不开。
但是现在想要做打的开可以看不能写,我发现
asmlinkage long sys_write(unsigned int fd, const char __user *buf,size_t count);
这里面只有fd,我怎么能从fd判断是不是一个指定文件呢?
如果是OPEN:
asmlinkage long sys_open(const char __user *filename,int flags, int mode);
有filename这个参数,我代码里直接if(filename判断一下是不是等于某个指定文件),就可以做到指定文件打不开。
但是现在想要做打的开可以看不能写,我发现
asmlinkage long sys_write(unsigned int fd, const char __user *buf,size_t count);
这里面只有fd,我怎么能从fd判断是不是一个指定文件呢?
作者: zonelight 发布时间: 2010-07-15
通过文件描述符获得对应的文件结构体指针,然后利用d_path函数就可以了
作者: superhappy1 发布时间: 2010-07-15
QUOTE:
通过文件描述符获得对应的文件结构体指针,然后利用d_path函数就可以了
superhappy1 发表于 2010-07-15 15:51
superhappy1 发表于 2010-07-15 15:51
求具体的做法
char * d_path ( const struct path * path,
char * buf,
int buflen);
我查到这个,但是怎么用啊?如何去“获得对应的文件结构体指针”?
作者: zonelight 发布时间: 2010-07-15
本帖最后由 kgn28 于 2010-07-15 18:10 编辑
回复 zonelight
current->files->fd_array[fd]->f_dentry->d_name :
复制代码
回复 zonelight
current->files->fd_array[fd]->f_dentry->d_name :
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/fs.h>
- #include <linux/string.h>
- #include <linux/mm.h>
- #include <linux/syscalls.h>
- #include <asm/unistd.h>
-
- MODULE_LICENSE("GPL");
-
- #define MY_FILE "/"
-
- char filename[1000];
-
- int print_dentry(struct dentry *den, char *p)
- {
- int len;
- if(den == den->d_parent){
- return 0;
- }
- len = print_dentry(den->d_parent, p);
- sprintf(p+len, "/%s", den->d_name.name);
- return len + strlen(den->d_name.name) + 1;
- }
-
- int __init mem_module_init(void)
- {
- struct file *f = NULL;
- struct dentry *den = NULL;
-
- printk("module init\n");
- f = filp_open("/root/program/test/simple/hello.c", O_RDWR | O_APPEND | O_CREAT, 0644);
- // f = filp_open(MY_FILE, O_RDONLY | O_DIRECTORY, 0644);
- if (IS_ERR(f)) {
- printk("error occured while opening file %s, exiting...\n", MY_FILE);
- return 0;
- }
- den = f->f_dentry;
- print_dentry(den, filename);
- printk("%s\n", filename);
-
- return 0;
- }
-
- void __exit mem_module_exit(void)
- {
-
- printk("hello modle exit\n");
- }
-
- module_init(mem_module_init);
- module_exit(mem_module_exit);
作者: kgn28 发布时间: 2010-07-15
http://linux.chinaunix.net/bbs/thread-1166566-1-5.html
作者: zyr-linux 发布时间: 2010-07-16
你先查看下文件描述符的结构体
作者: linux初学三月 发布时间: 2010-07-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28