c - 如何将标准输入和标准输出附加到 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/
我没有得到任何关于它的声明。
我还读到“从内核生成东西应该只在极其特殊的情况下完成”。但我这样做是为了学习。
非常感谢您提前!
解决方案
推荐阅读
- python - 从字典列表创建类似表的字符串
- c++ - 如何在 C++ 中删除类对象?
- wordpress - 将锚点#替换为wordpress帖子中的完整网址
- javascript - Backbone listenTo() 更改嵌套对象
- git - 如何将已经推送的 X 提交压缩到 Y?
- r - R markdown 在 HTML 标头后面添加 # 链接
- python - 如何从线性回归中添加最小值/最大值(不包括异常值)
- google-bigquery - 计算每组的一列的 TIMESTAMP 差异
- sql - SQL 查询 - 连接两个不同格式的 Sql 表
- java - 使用测试容器时如何解决“Can't get Docker image”?