在Linux下从C,C ++发出系统命令
我知道,在DOS / Windows应用程序中,您可以使用以下代码从代码发出系统命令:
system("pause");
要么
system("myProgram.exe");
…来自stdlib.h。 有没有类似的Linux命令,如果是的话,我可以find哪个头文件?
另外,这被认为是不好的编程习惯? 我正在考虑尝试使用lsmod
命令获取已加载的内核模块的列表。 这是一个好主意还是坏主意? 我发现一些网站,似乎查看系统调用(至less系统(“暂停”);)在负面的灯光。
毫不奇怪,命令仍然是
system("whatever");
而头文件仍然是stdlib.h
。 这个头文件的名字意思是“标准库”,这意味着它在支持C的每个标准平台上
是的,调用system()
往往是一个坏主意。 通常有更多的程序化的做事方式。
如果你想看看lsmod
是如何工作的,你可以随时查看它的源代码,看看它所做的主要系统调用是什么。 然后自己使用这些电话。
快速的Googlesearch会显示这个链接 ,这表明lsmod
正在读取/proc/modules
的内容。
system
是一个坏主意有几个原因:
- 您的程序暂停,直到命令完成。
- 它通过shell运行命令,这意味着您必须担心确保您传递的string对于shell来说是安全的。
- 如果你尝试用
&
运行一个后台命令,它最终会成为一个孙subprocess,并被init
进程(pid 1)孤立并带入,之后你无法检查它的状态。 - 没有办法将命令的输出读回你的程序。
对于第一个也是最后一个问题, popen
是一个解决scheme,但是没有解决其他问题。 你应该真的使用fork
和exec
(或posix_spawn
)来运行任何外部的命令/程序。
那么,lsmod通过parsing/proc/modules
文件来完成。 这将是我首选的方法。
我认为你正在寻找的是fork和exec。