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

wa-*_*-ha 24 c linux

在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)

  • @User,因为它是argv[0],即*程序名称*。 (4认同)

Ter*_*nal 9

如果您不熟悉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().


pmg*_*pmg 6

会不会system()够吗?

/* ... */
if (!strcmp(cmd, "hello")) system("hello.exe");
/* ... */
Run Code Online (Sandbox Code Playgroud)

  • 它是linux,所以很可能没有找到exe.虽然,它可以是任何名称. (2认同)
  • @vissi:`<cstdlib>`可能是C++版本; C版本在`<stdlib.h>`中声明 (2认同)