如何从 shell 脚本调用 C 源文件中的特定函数?

如何从 shell 脚本调用 C 源文件中的特定函数?

我有一个 C 源文件,其中包含一些函数。我想从 shell 脚本中调用一些特定的函数。我有一个sample.c包含以下内容的文件。我想funcA从 shell 脚本调用这里。我怎样才能做到这一点?

#include <stdio.h>

void funcA(void){
    printf("Congrats..!! This is function A...!!\n");
}


int main(void){
    printf("Better luck next time..!!\n");
    return 0;
}

答案1

如果您愿意通过在函数末尾添加对exit函数的调用(例如)来稍微更改代码,则可以通过将选项传递给链接器来编译代码,以在这种情况下成为它们的入口点。exit(0);-e funcAfuncA

假设文件被调用foo.c,您可以使用以下 shell 脚本,该脚本在从 shell 脚本调用时执行funcA文件中的函数。foo.ccall foo.c funcA

call() {
    cc -Wl,-e"$2" $1 && ./a.out
}

答案2

无法直接从 shell 调用 C 二进制文件/库中的函数。有些语言支持这一点(例如Pythonc类型)但我不知道 bash (或其他 shell)有任何类似的选项。

您需要使用命令行选项并使用选项/参数调用 C 程序,告诉您的程序调用特定函数。

因此,对于您的示例,您需要执行类似的操作

int main(int argc, char *argv[])  {

   if (argc != 2) {
      printf("Argument expected\n");
      return 1;
   }
   
   if (strcmp (argv[1], "funcA") == 0)
      funcA();
}

然后你可以像这样从 shell 调用它

$ ./a.out funcA
Congrats..!! This is function A...!!

相关内容