你如何编写一个C程序来执行另一个程序?

在linux中,我想编写一个启动另一个程序的C程序。 程序运行时,shell将等待您input您在程序中定义的命令。 这个命令将启动第二个程序。

例如,假定在调用程序所在的目录中有一个名为“hello”的简单C程序。 “你好”程序打印输出“你好,世界”。 第一个程序将运行,用户将input命令“hello”。 “hello”程序将被执行,“hello,world”。 会被输出到shell。

我做了一些search,并提出了“fork()”和“exec()”函数。 别人说要用“system()”。 我不了解这些function。 我如何调用这些函数? 他们适合使用?

示例代码与解释将是最有帮助的。 其他答案也欢迎。 非常感谢您的帮助。

#include <stdio.h> #include <stdlib.h> #include <unistd.h> /* for fork */ #include <sys/types.h> /* for pid_t */ #include <sys/wait.h> /* for wait */ int main() { /*Spawn a child to run the program.*/ pid_t pid=fork(); if (pid==0) { /* child process */ static char *argv[]={"echo","Foo is my name.",NULL}; execv("/bin/echo",argv); exit(127); /* only if execv fails */ } else { /* pid!=0; parent process */ waitpid(pid,0,0); /* wait for child to exit */ } return 0; } 

如果你是fork的新手,fork和exec的图形表示可能对你有帮助。

描述fork()

  +-------------+ |main program | +-------------+ (fork()) |___________________________ +-------------+ | |main program | +-------------+ +-------------+ |main program | | +-------------+ +-------------+ | (exec()) |main program | +-------------+ +-------------+ |hello program| +-------------+ 

正如你可能已经在教程中读过的那样,在调用fork()之后,创建了现有程序的重复副本,并且之后的exec()将用作为参数传递给它的新程序替换该副本。 两个程序的两个执行单元将在fork()之后运行。

system()不够适合你吗?

 /* ... */ if (!strcmp(cmd, "hello")) system("hello.exe"); /* ... */ 

对于最简单的情况,你应该在一个目录中编译两个程序:

 > ls . hello second 

在第二个程序中,你只需要调用system("hello");

我做了一些搜索,人们建议fork()exec()函数。 别人说要用system() 。 我不了解这些功能。 我如何调用这些函数? 他们适合使用?

是。 首先阅读fork(2) , exec(3) , system(3)的文档( man页) 。 很可能你在你的计算机上使用man(1)在本地文档。 请注意, system使用sh (通过bash(1)或破折号(1) ),因为它是fork -ing, execve(2) -ing和waitpid(2) – /bin/sh POSIX外壳程序。

我认为fork很难理解,因为它成功返回“两次”。 我不会在这里解释它(我需要很多页面)。 我建议先阅读fork(系统调用) wikipage。 然后,阅读一些很好的Linux编程书籍,例如高级Linux编程 (免费下载)。

还请阅读有关虚拟地址空间和过程(5) 。

您也可以阅读操作系统:三个简单的部分为更一般的看法。