函数system

在程序中执行一个shell命令将会大大使得程序便捷。当然,我们可以使用fork来创建一个新进程,然后在子进程中调用exec函数簇来完成启动一个新程序。但是为了方便起,ISO C定义了一个system函数,但是它对系统的依赖很强。而POSIX扩展了这一定义。

#include <stdlib.h>

int system(const char *command);

在Unix系统下,system函数总是可用的。system在其实现中调用了fork,exec,waitpid。因此它的返回值有三种。

  1. fork失败或者waitpid返回错误,则system返回-1。
  2. 如果exec失败,表示不能执行shell。则返回值和shell执行了exit(127)一样。
  3. 三个函数都执行成功,那么返回shell的终止状态。

当我们有一个shell需要执行的时候,建议使用system来实现,而不是自行fork,exec。system函数进行了出错处理以及各自信号处理。

一个简单的例子是,我们将当前环境变量保存到一个文件,在终端下,可以很方便的执行命令env > env.txt来保存。现在我们有了system,也可以很简答的实现这个操作。

#include<stdlib.h>
int main()
{
    system("env > env.txt");
    return 0;
}

编译,执行以后,成功将当前环境变量保存到env.txt中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券