我检查了 Linux system() 函数源代码,它会 fork 一个子进程并执行
execl("/bin/sh", "sh", "-c", command, (char *) 0);
所以通过这种方式,我们可以在我们的代码中使用一些命令。
但是当我们在控制台中输入命令时会发生什么?我们是否还需要 fork 一个子进程(系统为我们完成这项工作)?如果是这样,为什么我们需要 fork 一个子进程?
我有这个问题,因为我在最近的项目中出人意料地得到了不同的结果(即使使用 popen()。popen() 与 system() 的结果似乎相同。
如果我的问题太复杂,任何链接或资源也将不胜感激。
system() 用于执行您提供的命令。它的签名是
int system(const char *command); /* it is returning the address of your command*/
注意:您可以在控制台中输入“man system()”来阅读 system() 的手册页。
当您直接键入命令时[您的操作系统会找到这些命令,因为这些命令是 OS PATH 的一部分。例如windows中的system32,Linux中的/usr/bin etc.]在控制台中,你也到达命令的地址,然后命令执行。
注意:每次执行时,它都会派生一个新进程。一个进程有一个从它开始的入口点。
通过 system() 调用的唯一区别是它是通过指针调用的。当您键入 command 时,您将通过变量引用访问该命令。
popen()请参见手册页。/*man popen() */
-- 此管道流入/流出管道。
打开的输出是文件。请参阅手册页中的签名。
FILE *popen(const char *command, const char *type);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句