我已经关注了从内核调用用户应用程序这个伟大的文档: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
并且想知道这是否是我所追求的,但我无法掌握如何使用它或找到任何类似上面的文件。
提前感谢您的建议/帮助!
答案 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
。