首页 > 解决方案 > 如何将标准输入和标准输出附加到 call_usermodehelper 调用的用户进程

问题描述

在学习了一点 call_usermodehelper() 和大量试验之后,它成功执行了。这是代码: -

#include <linux/module.h>
#include <linux/umh.h>
static char *argv[] = {"/bin/sh","-c","/home/san/Temp/my_prog",0};
static char *envp[] = {"HOME=/","TERM=linux","PATH=/usr/sbin:/usr/bin:/sbin:/bin",0};
static int __init userspace_start(void) {
    printk("Start...\n");
    call_usermodehelper(argv[0],argv,envp,UMH_WAIT_PROC);
    printk("End...\n");
    return 0;
}
static void __exit userspace_exit(void) {
    printk("Exit\n");
}
module_init(userspace_start);
module_exit(userspace_exit);
// my_prog.c
#include <stdio.h>
void main() {
    for(int i = 0; i < 20; i++)
        printf("Testing\n");
}

我正在研究 Linux Kernel 4.15.0-29-generic

现在,我面临的问题是我没有在终端上得到任何输出。搜索后我发现我需要附加标准输入和标准输出,我还发现要覆盖标准输入和标准输出。所以,我对“附加/覆盖”标准输入和标准输出感到困惑。我实际上对此并不了解,并且想了解有关 linux 内核的内容。那么,我能否获得有关如何附加/覆盖标准输入和标准输出的示例代码,以便在从 call_usermodehelper 生成用户空间程序后,我可以在终端上看到输出,或者我应该遵循哪些步骤来实现这一点。

我还找到了 call_usermodehelper_pipe 但没有运气,即当我执行时:grep -r "call_usermodehelper_pipe" /usr/src/linux-headers-4.15.0-29-generic/include/linux/我没有得到任何关于它的声明。

我还读到“从内核生成东西应该只在极其特殊的情况下完成”。但我这样做是为了学习。

非常感谢您提前!

标签: clinuxlinux-kernelkernel-module

解决方案


推荐阅读