一部の機能を含むCソースファイルがあります。シェルスクリプトから特定の機能を呼び出したいです。sample.c
次の内容を含むファイルがあります。funcA
シェルスクリプトでこれを呼び出したいです。どうすればいいですか?
#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 funcA
funcA
ファイルが呼び出されると仮定すると、foo.c
シェルスクリプトから呼び出されたときにfuncA
ファイルの機能を実行する次のシェルスクリプトを使用できます。foo.c
call foo.c funcA
call() {
cc -Wl,-e"$2" $1 && ./a.out
}
答え2
C バイナリ/ライブラリの関数は、シェルから直接呼び出すことはできません。一部の言語ではこれをサポートしています(例:PythonCタイプ)しかし、bash(または他のシェル)にも同様のオプションはありません。
コマンドラインオプションを使用し、オプション/引数を使用してCプログラムを呼び出して特定の関数を呼び出すようにプログラムに指示する必要があります。
たとえば、次の操作を行います。
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Argument expected\n");
return 1;
}
if (strcmp (argv[1], "funcA") == 0)
funcA();
}
その後、シェルから次のように呼び出すことができます。
$ ./a.out funcA
Congrats..!! This is function A...!!