微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Linux下从C,C ++发出系统命令

我知道,在DOS / Windows应用程序中,您可以使用以下代码代码发出系统命令:

system("pause");

要么

system("myProgram.exe");

…来自stdlib.h。 有没有类似的Linux命令,如果是的话,我可以find哪个头文件

另外,这被认为是不好的编程习惯? 我正在考虑尝试使用lsmod命令获取已加载的内核模块的列表。 这是一个好主意还是坏主意? 我发现一些网站,似乎查看系统调用(至less系统(“暂停”);)在负面的灯光。

如果Linux中单个目录下的文件太多,会发生什么情况?

C ++在公共函数中使用system()安全还是不安全?

Linux C:收到信号后,是否有可能知道发件人的PID?

Windows文件系统统计更新频率

打开“Internet属性”并等待用户closures它C#

PHP 4和5,Ctrl-C,system()和subprocess

确定“系统负载

MAC(UNIX)系统上的PATH是什么?

如何在Windows上使用Perl的认应用程序打开文件

应用程序是否可以伪装成文件文件夹?

毫不奇怪,命令仍然是

system("whatever");

而头文件仍然是stdlib.h 。 这个头文件的名字意思是“标准库”,这意味着它在支持C的每个标准平台上

是的,调用system()往往是一个坏主意。 通常有更多的程序化的做事方式。

如果你想看看lsmod是如何工作的,你可以随时查看它的源代码,看看它所做的主要系统调用是什么。 然后自己使用这些电话。

快速的Google搜索显示这个链接 ,这表明lsmod正在读取/proc/modules的内容

system一个坏主意有几个原因:

您的程序暂停,直到命令完成。

它通过shell运行命令,这意味着您必须担心确保您传递的字符串对于shell来说是安全的。

如果你试图用&运行一个后台命令,它最终会成为一个孙子进程,并被init进程(pid 1)孤立并带入,之后你无法检查它的状态。

没有办法将命令的输出读回你的程序。

对于第一个也是最后一个问题, popen是一个解决方案,但是没有解决其他问题。 你应该真的使用fork和exec (或posix_spawn )来运行任何外部的命令/程序。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐