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

迈克尔

我检查了 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Linux中,临时文件和常规文件之间的主要区别是什么?

今天,Unix和Linux内核之间的主要区别是什么?

OSX和Linux上的g ++编译器之间的主要区别是什么?

命令和触发器之间的主要区别是什么?(Xamarin)

HTTP和COAP之间的主要区别是什么?

yarn和npm之间的主要区别是什么?

Babel和TypeScript之间的主要区别是什么

“ gc”和“ gccgo”之间的主要区别是什么?

滑行和Godep之间的主要区别是什么?

StringTemplate和FreeMarker之间的主要区别是什么?

Docker和Snap之间的主要区别是什么?

Docker 和 Kubernetes 之间的主要区别是什么

PHPExcel和PhpSpreadsheet之间的主要区别是什么?

Flink和Storm之间的主要区别是什么?

<br>和<br />的主要区别是什么

Netty和JGroups之间的主要区别是什么?

MDM和ESB之间的主要区别是什么?

ContainerControlledLifetimeManager和HierarchicalLifetimeManager之间的主要区别是什么?

hmc和backoffice之间的主要区别是什么?

$ .ajax和$ .post之间的主要区别是什么?

OpenTracing和Zipkin之间的主要区别是什么?

chmod和chown之间的主要区别是什么?

GuixSD 和 NixOS 之间的主要区别是什么?

CGAffineTransformMake 和 CGAffineTransformMakeRotation 之间的主要区别是什么?

TFS 中 CLI 和 tf.exe 命令行之间的主要区别是什么?

Java中的互斥量和信号量是什么?主要区别是什么?

System.Net.Http.HttpClient与Windows.Web.Http.HttpClient-主要区别是什么?

静态类和单例类之间的主要区别是什么

Angular2中的装饰器@Input()和@Attribute()之间的主要区别是什么?