使用C与Shell交互

时间:2015-03-22 20:15:42

标签: c linux shell

我有一个名为TEST的二进制文件,它生成一个bash shell,我希望编写一个运行TEST的C程序,然后将命令传递给它生成的bash shell - 我试过以下 - 有人可以指出这是不是可能。我可以使用该文件运行,但不知道如何将命令传递给shell它会产生:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
  system("/var/testfolder/TEST"); #run the test file
  return 0;
}

1 个答案:

答案 0 :(得分:3)

UNIX样式的popen()函数是您想要使用的。 有关详细信息,请参见手册页。

它在子进程中运行您的命令,并为您提供与之交互的管道。它返回一个像fopen()那样的FILE句柄,但你用pclose()而不是fclose()来关闭它。否则,您可以使用与文件流相同的方式与管道交互。非常容易使用和有用。

这是一个link to a use case示例

另请查看此示例,说明执行您要执行的操作的方法:

#include <stdio.h>

int main(void) {
  FILE *in;
  extern FILE *popen();
  char buf[512];

  if (!(in = popen("ls -sail", "r")))
    exit(1);

  while (fgets(buf, sizeof(buf), in) != NULL)
    printf("%s", buf);

  pclose(in);
}