在C中执行一个bash命令(没有系统)

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

这是执行命令而不分析命令及其各种参数的一种方式:

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

首先,这不是一个“bash”命令。 bash是一个shell,但你在那里有一个程序命令行。

你应该看看系统调用

  • – 用于创建一个新的过程
  • 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; }