gpt4 book ai didi

c - Linux 内核 I/O

转载 作者:行者123 更新时间:2023-11-30 18:25:28 27 4
gpt4 key购买 nike

我正在尝试修改 Linux 内核上的 rm_dir 命令。我想添加一个确认请求。类似于:“您确定要删除此目录吗(是/否):”

我已经在文件系统的 fs 目录下找到了实现(或者至少我认为我已经找到了)。我认为必须有某种管理器来检查特定体系结构上使用的文件系统,然后调用删除过程的适当实现。但是,我找不到这样的“经理”功能。我发现的只是以下宏:

SYSCALL_DEFINE1(rmdir, const char __user *, pathname)
{
return do_rmdir(AT_FDCWD, pathname);
}

这只是调用其上方的函数 do_rmdir 。这是:

static long do_rmdir(int dfd, const char __user *pathname)
{
int error = 0;
struct filename *name;
struct dentry *dentry;
struct nameidata nd;
unsigned int lookup_flags = 0;
retry:
name = user_path_parent(dfd, pathname, &nd, lookup_flags);
if (IS_ERR(name))
return PTR_ERR(name);

switch(nd.last_type) {
case LAST_DOTDOT:
error = -ENOTEMPTY;
goto exit1;
case LAST_DOT:
error = -EINVAL;
goto exit1;
case LAST_ROOT:
error = -EBUSY;
goto exit1;
}

nd.flags &= ~LOOKUP_PARENT;
error = mnt_want_write(nd.path.mnt);
if (error)
goto exit1;

mutex_lock_nested(&nd.path.dentry->d_inode->i_mutex, I_MUTEX_PARENT);
dentry = lookup_hash(&nd);
error = PTR_ERR(dentry);
if (IS_ERR(dentry))
goto exit2;
if (!dentry->d_inode) {
error = -ENOENT;
goto exit3;
}
error = security_path_rmdir(&nd.path, dentry);
if (error)
goto exit3;
error = vfs_rmdir(nd.path.dentry->d_inode, dentry);
exit3:
dput(dentry);
exit2:
mutex_unlock(&nd.path.dentry->d_inode->i_mutex);
mnt_drop_write(nd.path.mnt);
exit1:
path_put(&nd.path);
putname(name);
if (retry_estale(error, lookup_flags)) {
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
return error;
}

我尝试添加 printk 语句,但结果超出了使用该内核的实际 UML。结果根本没有显示在正确的 UML 窗口中 - (使用该内核的窗口)。我不知道如何在内核空间中进行 I/O。有人可以帮忙吗?谢谢。

最佳答案

您试图在完全错误的地方进行此更改。您要修改的 rmdir 命令不是内核的一部分,它是一个用户空间程序。在我的系统上,rmdir 来自 GNU coreutils 。要了解您的是否相同,请在 shell 中尝试 rmdir --help

如果您确认您也在使用 GNU coreutils,您可以从 gnu.org 下载源代码,对其进行修改,重新编译,然后将修改后的二进制文件复制到您的 /bin 目录中。

但是,有一种更简单的方法可以完成您想做的事情:编写一个小 shell 脚本来发出所需的确认请求,然后运行 ​​/bin/rmdir。如果需要,您可以调用脚本 rmdir

关于c - Linux 内核 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802219/

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