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

use*_*375 2 c linux bash

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

dat*_*olf 5

首先,这不是“bash”命令。bash 是一个外壳程序,但您拥有的是一个程序命令行。

您应该查看系统调用

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

为了让您有一个良好的开端,以下是您在不调用 的情况下从程序启动 shell 的方法system(…)

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;
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*kov 5

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

execl("/bin/sh", "/bin/sh", "-c", "your-command-without-parsing", 0);
Run Code Online (Sandbox Code Playgroud)