🌊

JavaScriptでC言語のプログラムを実行する

2024/02/01に公開
2

最近はlinuxやハードウェアやネットワークなど低レイヤの勉強をしています。プログラムはどの言語でも最終的に機械語で実行されており、なら他の言語のプログラムも実行できるではと思い、調べてみました。そうするとJavaScriptでC言語が実行できたのでやり方を共有します。

環境

1.C言語のプログラムを準備

C言語の簡単なプログラムを準備します。適当な引数を受け取りそれを標準出力で吐くようなものにしました。

main.c
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
    for (int i=1; i < argc; i++){
        printf("%s\n",argv[i]);
    }
    exit(0);
}

2. C言語のプログラムをコンパイル

C言語のプログラムをコンパイルします。

gcc -o main main.c

まずはそのまま実行してます。

./main aaa bbb ccc
aaa
bbb
ccc

問題なく実行できました。

3. C言語を実行するJavaScriptのプログラムを作成

C言語を実行するJavaScriptのプログラムを作成します。child_processというNodeのコアモジュールを使用するのでnodeが実行できる環境であれば何もインストールする必要はありません。commandでプログラムを指定し、argValueで引数を指定します。実行したら標準出力を出力するようにしています。

main.js
const { exec } = require('child_process');

const argValue = 'tttttt aa aaaa';
const command = `./main ${argValue}`;

exec(command, (error, stdout, stderr) => {
    if (error) {
        console.error(`Error: ${error.message}`);
        return;
    }
    console.log(`${stdout}`);
});

4. 実行

実行してみます。

node main.js      
aaa
bbb
ccc

問題なく実行できました。コンパイラ言語(C++やgoやRustなど)ならコンパイル後に機械語になるので他の言語でも呼び出すことは可能です。ですが、インタプリタ言語(JavaやPythonなど)はそれぞれの言語のインタプリタが都度プログラムを解釈し、機械語にしているのでインタプリタ言語を他の言語から呼び出すことは多分できないです。

Discussion

yaito3014yaito3014

main.c に main.js を載せ間違えていないでしょうか?
また、タグに AWS や Python 及び C++ などがありますが、記事の内容に関連していますか?

盆栽エンジニア盆栽エンジニア

ご指摘ありがとうございます。完全に載せ間違えてました。タグは記事に関係ないので消しておきました。