gpt4 book ai didi

linux - 使用内核模块更改文件打开模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:45 27 4
gpt4 key购买 nike

我正在使用内核模块进行一些测试,使用以下代码将进程的文件打开模式从写入更改为只读,我从 lsof -p <pid of process> 中获取文件描述符编号并编译模块 && insmod changefilemode.ko 它适用于 fedora 19,但如果我在 RedHat 5 上执行它,文件描述符将关闭。

  #include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/file.h>
#include <linux/fs.h>


struct files_struct *get_files_struct(struct task_struct *task)
{
struct files_struct *files;

task_lock(task);
files = task->files;
if (files)
atomic_inc(&files->count);
task_unlock(task);

return files;
}


MODULE_LICENSE("GPL");

static int __init myinit(){
struct task_struct *tsk;
for_each_process(tsk){

if(tsk->pid == 11923){
struct files_struct *files = get_files_struct(tsk);
task_lock(tsk);
printk("\tpid %d - file mode %d\n",tsk->pid, files->fd_array[6]->f_mode);
files->fd_array[6]->f_mode = FMODE_READ;
printk("\tpid %d - file mode %d\n",tsk->pid, files->fd_array[6]->f_mode);
task_unlock(tsk);
}
}
return 0;
}

static void __exit myexit(){
printk("Good Bye from exit");
}


module_init(myinit);
module_exit(myexit);

最佳答案

确切的 PID 值取决于启动期间进程启动的确切时间顺序。没有办法确保进程启动的确切时间顺序在各个发行版中是确定性的,除非您根据您的确切需求仔细调整事情,并假设 init 进程完全相同。

此外,fd 编号取决于进程执行期间 open() 的时间顺序。

关于linux - 使用内核模块更改文件打开模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com