如何从另一个C程序中调用C程序

3
我有两个C程序,Project1A.c和Project1B.c。我正在尝试使用execl()从Project1B内部执行Project1A,但到目前为止它还没有起作用。
Project1B.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main ()
{
  pid_t pid;

  switch((pid = fork()))
  {
    case -1:
      printf("I'm sorry, fork failed\n");
      break;
    case 0:
      execl("Project1A.c", "./prog", NULL);
      printf("EXECL Unsucessfull");
      break;
    default:
      printf("This is some parent code\n");
      break;
  }
  printf("End of Program\n");

  return 0;
}

7
无法直接执行C源代码文件,需要运行编译后的程序。 - Fred Larson
1
你必须“等待”子进程,并测试“exec”的返回值,以确定是否发生任何错误。 - dmi
1
一个“C程序”与计算机关系很小。它是对抽象机器指令的抽象描述。另一方面,对于真正的计算机,一个程序与C关系很小。一个程序只是一个程序。C只是创建程序的一种方式,但它不是结果的一部分。 - Kerrek SB
1
@dmi:返回值中没有太多需要测试的内容。如果成功,它不会返回任何东西。如果返回了,返回值为-1。不过,检查一下errno可能有助于了解问题所在。 - Fred Larson
1
编译它。类似于 cc -o Project1A Project1A.c - Fred Larson
显示剩余4条评论
1个回答

3

execl执行二进制文件,这意味着你不能传递 Project1A.c 并期望它工作。你需要编译它并执行编译程序。

该函数的后续参数是命令行参数,以NULL结尾。这意味着你的 execl 调用相当于在shell上运行 ./Project1A.c ./prog ,这显然是无法工作的。

相反,你的 execl 调用应该是:execl("prog1A", NULL);

另外,如果编译成功,你可以通过使用系统函数先运行编译命令,然后使用execl运行编译后的程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接