从C中的字符串执行bash命令(无系统)

时间:2014-04-11 11:00:10

标签: c linux bash

正如标题所说,我有一个字符串,其中包含由输入给出的bash命令(例如,command =“ls -l”),我需要从C程序执行它。 我知道我可以简单地使用系统(命令),但这是一个学校练习,我不能使用系统,也不能使用popen。 我想过使用exec *,但是需要解析字符串以分离命令和各种参数。 是否有一个系统调用(不是系统),它允许我简单地执行带有参数的命令而不必将它们分开? 提前感谢您的答案:)

2 个答案:

答案 0 :(得分:5)

这是一种在不解析命令及其各种参数的情况下执行命令的方法:

execl("/bin/sh", "/bin/sh", "-c", "your-command-without-parsing", 0);

答案 1 :(得分:4)

首先,那不是" bash"命令。 bash是一个shell,但你有一个程序命令行。

您应该查看系统调用

  • fork - 用于创建新流程
  • execve - 用于将程序图像替换为来自不同二进制文件的程序。
  • waitpid - 用于等待分叉进程的终止

为了让您先行一步,您可以在不调用system(…)的情况下从程序中启动shell:

pid_t spawnshell(void)
{
    char *argv[]={"/bin/sh", 0};
    char *envp[]={0};

    pid_t shpid = fork();
    if(!shpid) {
        execve(argv[0], argv, envp);
        perror("execve");
        assert(0 && "execve failed");
        _exit(-1);
    }

    return shpid;
}