execl("/bin/sh", "sh", "-c", command, (char *) 0);
因此,通过这种方式,我们可以在代码中使用一些命令。
但是当我们在控制台中键入命令时会发生什么?我们还需要fork一个子进程(系统为我们工作)?如果是这样,为什么我们需要fork一个子进程?
我有这个问题因为我在最近的项目中出乎意料地得到了不同的结果(即使使用了popen()。popen()似乎与system()的结果相同。
如果我的问题太复杂,任何链接或资源也将受到赞赏。
答案 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);