创建运行C程序并将批处理命令传递给第二个C程序

时间:2015-12-17 21:34:01

标签: c

提前感谢您的帮助。

我对C比较陌生,想完成以下任务。我有一个C程序,它接受一系列控制台输入,直到给出终止命令。例如

./myCProg  //runs myCProg in console
do this
do that
.....
quit // terminates program

我有一个包含一系列命令的文件,我希望以上面给出的格式运行这些命令。我想创建第二个C程序,它将运行上面给出的C程序并将文件中的命令传递给它以加快速度。在大多数情况下,我知道如何做到这一点。但是,如何在第二个C程序中运行第一个C程序并将命令传递给它?

2 个答案:

答案 0 :(得分:2)

在第二个程序中,打开输入文件以便使用open,然后fork()进行阅读。在分叉过程中,使用dup2将输入文件的文件描述符复制到文件描述符0,然后使用exec函数调用第一个程序。

结果是第一个程序运行时输入文件连接到其stdin,就像从命令行运行./prog1 < input_file一样。

int fd = open("input_file", O_RDONLY);
if (fd == -1) {
    perror("open failed");
    exit(1);
}
pid_t pid = fork();
if (pid == -1) {
    perror("fork failed");
    exit(1);
} else if (pid == 0) {
    dup2(fd, 0);
    execl("/path/to/prog1", "prog1", NULL);
    perror("exec failed");
    exit(1);
}

答案 1 :(得分:1)

(你想要实现的目标还不清楚;我只是猜测;它是特定于操作系统的;我猜你使用的是Linux或其他一些POSIX)

它似乎与某些shell类似。您可以从现有shell的代码中获取灵感(例如bashsashzshfish ...)

或者,在您的顶级C程序中嵌入一些现有的解释器(如GuileLua ...)。

顺便说一句,要从C运行命令,请考虑system(3)popen(3);例如,您可以popen("/bin/sh", "w")fprintf一些shell命令,然后pclose

或许,您需要通过阅读advanced linux programming来了解广泛的情况,然后看syscalls(2)(特别是fork(2)pipe(2)dup2(2),{{3} },....)