在unix中,似乎有两种从C运行外部可执行文件的常用方法
system()
Run Code Online (Sandbox Code Playgroud)
打电话和
pid = fork()
switch(pid)
//switch statement based on return value of pid,
//one branch of which will include and exec() command
Run Code Online (Sandbox Code Playgroud)
在函数等效的情况下,有没有理由更喜欢fork/exec而不是系统(父进程等待子进程完成,没有从子进程返回复杂的信息)?
Fre*_*Foo 19
system
执行一个命令解释器,即一个shell,它(a)比直接fork/exec慢,(b)在不同的系统上可能表现不同,(c)如果你从一个不受信任的传递一个字符串是一个潜在的安全隐患资源.此外,system
等待子进程退出,而您可能希望它与父进程同时运行.
更一般地说,低级fork/exec为您提供了额外的控制:在两个操作之前或之间,您可能需要chdir
,打开管道,关闭文件描述符,设置共享内存等.
(通过不同的系统,我不是指Windows与Unix(因为Windows甚至没有fork):我说的是Red Hat Linux与Ubuntu.前者使用Bash来执行传递的内容system
,后者是轻量级POSIX兼容外壳.)