在linux中,我想编写一个启动另一个程序的C程序.程序运行时,shell将等待您输入在程序中定义的命令.此命令将启动第二个程序.
例如,假设在与调用程序相同的目录中有一个名为"hello"的简单C程序."hello"程序打印输出"hello,world".将运行第一个程序,用户将输入命令"hello"."hello"程序将被执行并且"hello,world".将输出到shell.
我做了一些搜索,人们建议使用"fork()"和"exec()"函数.其他人说使用"system()".我对这些功能一无所知.我该如何调用这些功能?它们适合使用吗?
带解释的示例代码最有帮助.其他答案也欢迎.非常感谢您的帮助.
Svi*_*ack 34
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉fork,有关fork和exec的图形表示可能对您有所帮助.
描写 fork()
+-------------+
|main program |
+-------------+ (fork())
|___________________________
+-------------+ |
|main program | +-------------+
+-------------+ |main program |
| +-------------+
+-------------+ | (exec())
|main program | +-------------+
+-------------+ |hello program|
+-------------+
Run Code Online (Sandbox Code Playgroud)
正如您可能已经在教程中读到的那样,在调用fork()现有程序的exec()副本之后,创建了该副本,然后将该副本替换为新程序,并将其作为参数传递给它.两个程序的两个执行单元将在之后运行fork().
会不会system()够吗?
/* ... */
if (!strcmp(cmd, "hello")) system("hello.exe");
/* ... */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77082 次 |
| 最近记录: |