【发布时间】:2011-11-15 01:19:17
【问题描述】:
在基于 unix 的系统中,命令 exec(const char *c) 和 system(const char *c) 到底有什么区别?
两者都可以从 C 程序中调用以执行系统调用。两者有区别吗?
【问题讨论】:
在基于 unix 的系统中,命令 exec(const char *c) 和 system(const char *c) 到底有什么区别?
两者都可以从 C 程序中调用以执行系统调用。两者有区别吗?
【问题讨论】:
exec 用指定的程序替换您的进程。您的程序已完成,不会继续运行。
spawn 启动一个新进程(可能首先使用fork),并在您的程序继续执行时运行指定的程序。
system 启动一个新进程(可能首先使用fork),并在您的程序等待时运行指定的程序。一旦孩子退出,您的程序将继续。
【讨论】:
system 也在 shell 下运行命令,如/bin/sh -c "command"。如果命令包含有趣的字符,则差别很大。
exec 将执行一个文件,而system 将执行一个 shell 并为其提供参数。
来自维基百科:
它(系统)与 exec/spawn 系列函数的不同之处在于,它不是将参数传递给已执行的对象,而是将单个字符串传递给系统 shell,通常是 POSIX shell,/bin/sh -c。
http://en.wikipedia.org/wiki/System_%28C_standard_library%29
【讨论】: