我知道在DOS / Windows应用程序中,您可以使用以下行代码从代码发出系统命令:
system("pause");
或
system("myProgram.exe");
...来自stdlib.h。是否有类似的Linux命令,如果是这样,我会在哪个头文件中找到它?
另外,这被认为是不好的编程习惯吗?我正在考虑使用lsmod
命令获取加载的内核模块列表。这是个好主意还是坏主意?我发现一些网站似乎以负面的方式查看系统调用(至少是系统(“暂停”);)。
答案 0 :(得分:13)
system
有几个原因是个坏主意:
&
运行后台命令,它最终会成为孙子进程,并被init
进程(pid 1)孤立并进入,您无法使用之后检查其状态。对于第一个也是最后一个问题,popen
是一个解决方案,但它没有解决其他问题。您应该自己使用fork
和exec
(或posix_spawn
)来运行任何外部命令/程序。
答案 1 :(得分:10)
毫不奇怪,该命令仍然是
system("whatever");
,标题仍为stdlib.h
。该头文件的名称意味着“标准库”,这意味着它位于支持C的每个标准平台上。
是的,调用system()
通常是一个坏主意。通常有更多的编程方式。
如果您想了解lsmod
的工作原理,您可以随时查找其源代码,并查看主要系统调用的内容。然后自己使用这些电话。
快速Google搜索出现this link,表示lsmod
正在阅读/proc/modules
的内容。
答案 2 :(得分:3)
嗯,lsmod通过解析/proc/modules
文件来完成它。那将是我的首选方法。
答案 3 :(得分:0)
我认为你要找的是fork和exec。