C言語 プログラム再実行の基本と方法
C言語では、exec()関数を呼び出すことでプログラムを再実行できます。exec()関数はシステムコール関数であり、現在のプロセスを新しいプロセスに置き換えます。exec()関数を呼び出す際には、実行するプログラムのパスやコマンドライン引数を指定することができます。以下は、簡単なサンプルコードです:
#include <stdio.h>
#include <unistd.h>
int main() {
printf("I am the original program\n");
char *args[] = {"./new_program", NULL};
execvp(args[0], args);
printf("This line will not be printed because the program has been replaced\n");
return 0;
}
上記のコードでは、最初にメッセージを表示し、その後に新しいプログラムのパスを格納するための文字列配列argsを定義します。その後、execvp()関数を呼び出し、現在のプロセスを新しいプログラムnew_programに置き換えます。execvp()関数が成功すると、元のプログラムのコードの後部は実行されません。
exec()関数ファミリーの関数は、現在のプロセスを新しいプログラムで置き換えてしまうため、元のプログラムの状態やデータが失われる可能性があります。元のプログラムが終了した後に新しいプログラムを実行したい場合は、fork()とexec()の組み合わせを考慮することができます。最初に子プロセスを作成し、その後子プロセス内でexec()を呼び出して新しいプログラムを実行します。