プログラムの編成方法が原因で、execvp() を使用して呼び出したい C++ 関数があります。
これは可能ですか?
execvp() を含むすべての exec バリアントは、ファイルシステムに表示される完全なプログラムのみを呼び出すことができます。幸いなことに、すでにロードされているプログラムで関数を呼び出したい場合、必要なのは fork() だけです。次の疑似コードのようになります。
int pid = fork();
もし (pid == 0) {
// ここで関数を呼び出します。これは新しいプロセスであり、
// 行った変更は親に反映されません
// 変数。次のようなファイルや共有リソースには注意してください
// データベース接続。
_exit(0);
}
そうでなければ (pid == -1) {
// エラーが発生し、fork() が失敗しました。これは非常にまれです
// エラーですが、処理する必要があります。
}
そうしないと {
// 子が終了するのを待ちます。シグナルハンドラを使用できます
// 子プロセスに時間がかかる場合は、後でキャッチします。
waitpid(pid, ...);
}
excecvp()は、関数ではなくプログラムを開始することを意味します。そのため、その関数をコンパイル済みの実行可能ファイルにラップし、そのファイルのメインで関数を呼び出す必要があります。