提前感谢您的帮助。
我对C比较陌生,想完成以下任务。我有一个C程序,它接受一系列控制台输入,直到给出终止命令。例如
./myCProg //runs myCProg in console
do this
do that
.....
quit // terminates program
我有一个包含一系列命令的文件,我希望以上面给出的格式运行这些命令。我想创建第二个C程序,它将运行上面给出的C程序并将文件中的命令传递给它以加快速度。在大多数情况下,我知道如何做到这一点。但是,如何在第二个C程序中运行第一个C程序并将命令传递给它?
答案 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的代码中获取灵感(例如bash
,sash
,zsh,fish ...)
或者,在您的顶级C程序中嵌入一些现有的解释器(如Guile或Lua ...)。
顺便说一句,要从C运行命令,请考虑system(3)或popen(3);例如,您可以popen("/bin/sh", "w")
和fprintf
一些shell命令,然后pclose
或许,您需要通过阅读advanced linux programming来了解广泛的情况,然后看syscalls(2)(特别是fork(2),pipe(2),dup2(2),{{3} },....)