私は私のプログラムが編成される方法のためにexecvp()を使って呼びたいC++関数を持っています。私のプログラムの中で定義されている関数に対してexecvp()を使用できますか?
これは可能ですか?
私は私のプログラムが編成される方法のためにexecvp()を使って呼びたいC++関数を持っています。私のプログラムの中で定義されている関数に対してexecvp()を使用できますか?
これは可能ですか?
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()は、関数ではなくプログラムを起動することを意味します。したがって、コンパイルされた実行可能ファイルにその関数をラップし、そのファイルのメイン呼び出しを関数に渡さなければなりません。