gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:46 25 4
gpt4 key购买 nike

我检查了 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()的手册页。

当您直接键入命令时[您的操作系统会找到这些命令,因为这些命令是操作系统路径的一部分。比如windows的system32,linux的/usr/bin等等] 在控制台,同样是到达命令的地址,然后执行命令。

注意:每次执行任何内容时,它都会派生一个新进程。一个进程从它开始的地方有一个入口点。

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

打开()请参阅手册页。/*man popen() */ -- 这个管道流进/出管道。

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

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

关于linux - Linux 控制台中的 system() 和 type 命令之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45272280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com