8bi*_*dge 3 c c++ linux system
我知道在DOS/Windows应用程序中,您可以使用如下行来从代码发出系统命令:
system("pause");
Run Code Online (Sandbox Code Playgroud)
要么
system("myProgram.exe");
Run Code Online (Sandbox Code Playgroud)
......来自stdlib.h.是否有类似的Linux命令,如果是这样,我会找到哪个头文件?
此外,这被认为是糟糕的编程习惯吗?我正在考虑使用该lsmod
命令获取加载的内核模块列表.这是个好主意还是坏主意?我发现一些网站似乎以负面的方式查看系统调用(至少是系统("暂停");).
R..*_*R.. 13
system
由于以下几个原因,这是个坏主意:
&
,它最终成为一个孙子进程,并被init
进程(pid 1)孤立并被接收,之后你无法检查它的状态.对于第一个也是最后一个问题,popen
是一个解决方案,但它没有解决其他问题.您应该使用fork
和exec
(或posix_spawn
)自己运行任何外部命令/程序.
chr*_*ock 10
毫不奇怪,命令仍然存在
system("whatever");
Run Code Online (Sandbox Code Playgroud)
标题仍然是stdlib.h
.该头文件的名称意味着"标准库",这意味着它位于支持C的每个标准平台上.
是的,打电话system()
往往是个坏主意.通常有更多程序化的做事方式.
如果你想看看它是如何lsmod
工作的,你总是可以查找它的源代码并查看它所做的主要系统调用.然后自己使用这些电话.
快速Google搜索会显示此链接,表示lsmod
正在阅读的内容/proc/modules
.