プログラム内で定義された関数でexecvp()を使用できますか?

StackOverflow https://stackoverflow.com/questions/648917

  •  19-08-2019
  •  | 
  •  

質問

プログラムの編成方法により、execvp()を使用して呼び出すC ++関数があります。

これは可能ですか?

役に立ちましたか?

解決

execvp()を含むすべてのexecバリアントは、ファイルシステムに表示される完全なプログラムのみを呼び出すことができます。幸いなことに、既にロードされているプログラムで関数を呼び出したい場合、必要なのはfork()だけです。この擬似コードのようになります:

int pid = fork();
if (pid == 0) {
    // Call your function here. This is a new process and any
    // changes you make will not be reflected back into the parent
    // variables. Be careful with files and shared resources like
    // database connections.
    _exit(0);
}
else if (pid == -1) {
    // An error happened and the fork() failed. This is a very rare
    // error, but you must handle it.
}
else {
    // Wait for the child to finish. You can use a signal handler
    // to catch it later if the child will take a long time.
    waitpid(pid, ...);
}

他のヒント

excecvp()は、関数ではなくプログラムを起動することを意味します。そのため、その関数をコンパイル済みの実行可能ファイルにラップし、そのファイルのメインで関数を呼び出す必要があります。

プロセスの作成は重い場合があります。関数を並列に呼び出すだけの場合、スレッドを使用しないのはなぜですか。 Boost QT または ACE

本当に別のプロセスで関数を実行する必要がある場合は、 fork または vfork 。 vforkはすべてのプラットフォームで利用できるわけではなく、欠点なので、使用できるかどうかを確認してください。フォークを使用しない場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top