Linux中控制台中system()和type命令的主要区别是什么?

时间:2017-07-24 03:41:39

标签: linux shell

我检查了Linux system()函数的源代码,它将fork一个子进程并执行

execl("/bin/sh", "sh", "-c", command, (char *) 0);

因此,通过这种方式,我们可以在代码中使用一些命令。

但是当我们在控制台中键入命令时会发生什么?我们还需要fork一个子进程(系统为我们工作)?如果是这样,为什么我们需要fork一个子进程?

我有这个问题因为我在最近的项目中出乎意料地得到了不同的结果(即使使用了popen()。popen()似乎与system()的结果相同。

如果我的问题太复杂,任何链接或资源也将受到赞赏。

1 个答案:

答案 0 :(得分:3)

system()用于执行您提供的命令。它的签名是

 int system(const char *command); /* it is returning the address of your command*/

注意:您可以在控制台中键入“man system()”来阅读system()的手册页。

直接键入命令 [您的操作系统找到这些命令,因为这些命令是OS PATH的一部分。例如,windows中的system32,Linux中的/ usr / bin等。] 在控制台中,您还可以访问命令的地址,然后执行该命令。

注意 :每当执行任何操作时,它都会生成新进程。进程具有从其开始的入口点。

通过system()调用的唯一区别是通过指针调用它。键入命令时,您将通过变量引用访问该命令。

<强> POPEN() 请参见手册页。 /*man popen() */ - 此管道流入/流出管道。

open的输出是FIle。请参见手册页中的签名。

 FILE *popen(const char *command, const char *type);