使用 C、C++ 在 Linux 中发出系统命令
- 2024-10-25 08:42:00
- admin 原创
- 68
问题描述:
我知道在 DOS/Windows 应用程序中,您可以使用如下代码从代码发出系统命令:
system("pause");
或者
system("myProgram.exe");
...来自 stdlib.h。是否有类似的 Linux 命令?如果有,我可以在哪个头文件中找到它?
另外,这是否被认为是不好的编程习惯?我正在考虑尝试使用该lsmod
命令获取已加载的内核模块列表。这是好主意还是坏主意?我发现一些网站似乎对系统调用(至少是 system("pause");)持负面看法。
解决方案 1:
system
这是一个坏主意,原因如下:
您的程序将被暂停,直到命令完成为止。
它通过 shell 运行命令,这意味着您必须担心确保传递的字符串对于 shell 评估来说是安全的。
如果您尝试使用 运行后台命令
&
,它最终会成为一个孙进程,并成为孤立进程 (pid 1) 并被接收init
,之后您无法检查其状态。无法将命令的输出读回到程序中。
对于第一个和最后一个问题,popen
这是一个解决方案,但它不能解决其他问题。您确实应该自己使用fork
and exec
(或posix_spawn
)来运行任何外部命令/程序。
解决方案 2:
毫不奇怪,该命令仍然是
system("whatever");
并且头文件仍然是stdlib.h
。该头文件的名称表示“标准库”,这意味着它存在于每个支持 C 的标准平台上。
是的,打电话system()
通常不是一个好主意。通常有更程序化的方式来做事。
如果你想了解它lsmod
的工作原理,你可以查阅它的源代码,看看它进行的主要系统调用是什么。然后自己使用这些调用。
快速的Google搜索会出现此链接,这表明lsmod
正在阅读的内容/proc/modules
。
解决方案 3:
好吧,lsmod 通过解析/proc/modules
文件来实现这一点。这是我首选的方法。
解决方案 4:
我认为您正在寻找的是 fork 和 exec。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD