在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,但是没有解决其他问题。 你应该真的使用forkexec (或posix_spawn )来运行任何外部的命令/程序。

那么,lsmod通过parsing/proc/modules文件来完成。 这将是我首选的方法。

我认为你正在寻找的是fork和exec。