我知道,在DOS / Windows应用程序中,您可以使用以下代码从代码发出系统命令:
system("pause");
要么
system("myProgram.exe");
…来自stdlib.h。 有没有类似的Linux命令,如果是的话,我可以find哪个头文件?
另外,这被认为是不好的编程习惯? 我正在考虑尝试使用lsmod命令获取已加载的内核模块的列表。 这是一个好主意还是坏主意? 我发现一些网站,似乎查看系统调用(至less系统(“暂停”);)在负面的灯光。
如果Linux中单个目录下的文件太多,会发生什么情况?
Linux C:收到信号后,是否有可能知道发件人的PID?
打开“Internet属性”并等待用户closures它C#
PHP 4和5,Ctrl-C,system()和subprocess
确定“系统负载”
MAC(UNIX)系统上的PATH是什么?
毫不奇怪,命令仍然是
system("whatever");
而头文件仍然是stdlib.h 。 这个头文件的名字意思是“标准库”,这意味着它在支持C的每个标准平台上
是的,调用system()往往是一个坏主意。 通常有更多的程序化的做事方式。
如果你想看看lsmod是如何工作的,你可以随时查看它的源代码,看看它所做的主要系统调用是什么。 然后自己使用这些电话。
快速的Google搜索会显示这个链接 ,这表明lsmod正在读取/proc/modules的内容。
您的程序暂停,直到命令完成。
它通过shell运行命令,这意味着您必须担心确保您传递的字符串对于shell来说是安全的。
如果你试图用&运行一个后台命令,它最终会成为一个孙子进程,并被init进程(pid 1)孤立并带入,之后你无法检查它的状态。
没有办法将命令的输出读回你的程序。
对于第一个也是最后一个问题, popen是一个解决方案,但是没有解决其他问题。 你应该真的使用fork和exec (或posix_spawn )来运行任何外部的命令/程序。
那么,lsmod通过解析/proc/modules文件来完成。 这将是我首选的方法。
我认为你正在寻找的是fork和exec。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。