call_usermodehelper / call_usermodehelperpipe用法

时间:2011-08-22 04:14:31

标签: c linux kernel

我已经关注了从内核调用用户应用程序这个伟大的文档:http://www.ibm.com/developerworks/linux/library/l-user-space-apps/index.html

但我现在对如何从已运行的应用程序获取输出感兴趣。我尝试传入重定向操作符将输出写入文件。例如:

char *argv[] = { "/usr/bin/ls", ">>", "/tmp/list", NULL};
call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);

没有这样的运气。我遇到了call_usermodehelperpipe并且想知道这是否是我所追求的,但我无法掌握如何使用它或找到任何类似上面的文件。

提前感谢您的建议/帮助!

2 个答案:

答案 0 :(得分:4)

>>不是ls的参数,它来自shell。它可以使用/bin/sh -c "ls >> /tmp/list"(在shell中)进行解析。在C中,这是:

char *argv[] = { "/bin/bash", "-c", "/bin/ls >> /tmp/list", NULL};

答案 1 :(得分:2)

您无法使用usermodehelper代码执行此操作,因为它仅支持运行连接到管道的stdin的进程。

除了stdout之外,您可以复制其功能,更改____call_usermodehelper以覆盖stdin