【问题标题】:How do you call a C program from within another C program如何从另一个 C 程序中调用 C 程序
【发布时间】:2017-03-23 13:51:53
【问题描述】:

我有两个 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;
}

【问题讨论】:

  • 你不能执行一个C源文件。你必须运行一个编译好的程序。
  • 子进程必须wait,以及测试exec的返回值是否发生错误。
  • “C 程序”与计算机关系不大。它是对抽象机器指令的抽象描述。另一方面,对于真正的计算机,程序与 C 几乎没有关系。程序只是一个程序。 C 只是创建程序的一种方式,但它不是结果的一部分。
  • @dmi:返回值没有太多需要测试的地方。如果成功,则不会返回。如果返回,则返回值为-1。不过,检查errno 可能不会有什么坏处,看看问题出在哪里。
  • 编译它。类似cc -o Project1A Project1A.c

标签: c fork exec


【解决方案1】:

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

函数的后续参数是命令行参数,以 NULL 结尾。这意味着您的 execl 调用对应于外壳上的 ./Project1A.c ./prog ,这显然不起作用。

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

另一方面,您可以通过首先使用系统函数运行编译命令来运行 C 代码,然后如果编译成功,则使用 execl 运行已编译的程序。

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2013-07-07
    • 2022-07-09
    • 2013-11-28
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多