私はインタラクティブなコード学習システムを作りたいと思っています。ユーザー (通常は若いプログラマー) が 1 つの関数の内容を C++ 言語で記述し、それをサーバーに送信すると、動的ライブラリにコンパイルされ、メイン プログラムから呼び出されます。
プログラムは、指定されたパラメーターに応じて、関数が正しい答えを返すことを期待しています。
もちろん、セグメンテーション違反などのエラーを引き起こす子供もいます。(サーバーは Linux を使用しています)。
では、関数を終了するシグナルハンドラを作成できますか?
私が達成したいこと:
for (int i = 0; i < PLAYER_NUM; i++) {
snprintf(buf, sizeof(buf), "players/%s.so", player[i]);
handle = dlopen(buf, RTLD_LAZY);
add[i] = (int (*)(int, int))dlsym(handle, "sum");
} // that was simply loading of functions from libraries.
for (int x = 0; x < 10; x++)
for (int i = 0; i < PLAYER_NUM; i++) {
if(failed[i]) continue;
ret = add[i](x, 5);
if(sigfault_received() || res != (x + 5)) {
failed[i] = true;
}
}