1

fork関数とexecvp関数を使用するcコードがあります。コードの目的は、コピーが完了したらsrc_fileをtarget_pathにコピーし、そのステータスをユーザーに通知することです(print msg)

execvpを使用すると、現在のプロセスイメージが置き換えられることを知っています。私が知りたかったのは、execvpに指定されたcmdが完了すると、コントロールが私のプログラムに戻り、後続のコードを実行するような代替手段はありますか。

pid = fork();
if (pid == 0) {
  /* child path */
  printf("Hello, This is CHILD(%d).\n", getpid());
  execvp("cp", av);
  printf("Completed Copying\n");
}
else {
  /* Parent's path */
  printf("Hello, This is PARENT(%d).\n", getpid());
  wait(NULL);
}
4

1 に答える 1

2

execvp は、現在のプロセスのイメージ、つまりそれが呼び出されたプロセス (fork で作成された子プロセス) を置き換えます。では、子が完了してメッセージを出力するのを親で(すでに行ったように)待ってみませんか?

次のリンクは、ステータスをテストして値を返す方法を示しています。 ファイルのコピー

または、コピー元ファイルとコピー先ファイルの両方に fopen() または open() を使用し、コードを使用してループでコピーしないでください。つまり、読み取りおよび書き込み API を使用してください。これは最速であり、目標を達成するために外部バイナリ cp を呼び出す必要がなくなりました。

于 2012-10-23T06:36:35.107 に答える