0

私はこれについてしばらく頭を悩ませていましたが、今は助けが必要です。子プロセスをフォークして、execve() を介して「echo hello」を呼び出すループを作成しようとしています。

#include <stdio.h>  
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc, char *argv[],char *envp[]){

  int i = 0;

  while(i<10){ 
    pid_t pid;
    pid = fork();

    if(pid != 0){
      int status;
      waitpid(-1, &status, 0);
    }

    if(pid == 0) {
      char *arg_array[2];
      arg_array[0]="echo";
      arg_array[1]="hello";
      char filename[] = "/bin/echo";     
      if (execve(filename,arg_array,envp) == (-1)) {
        printf("ERROR!\n");
        exit(1);
      }
    }  
    i++;
  }
}

最初、コードは最初の実行で失敗しましたが、その後のすべての実行で成功しました。さて、ここで提示するためにクリーンアップした後、まったく成功しません-私が得るのはエラーだけです! x 10. 私はさらに何かを壊したに違いありません。

これはこのサイトでの 2 番目の質問に過ぎないので、私の質問や建設的な批判を改善するための提案があれば、共有してください! ありがとうございました。

4

1 に答える 1

0

配列の最後NULLの要素がありませんargvperrorの後にa を使用するexecveと、適切なエラー メッセージも表示されます。したがって:

char *arg_array[3]; arg_array[0] = "echo"; arg_array[1] = "hello"; arg_array[2] = NULL;

さらに、あなたは行方不明です#include <unistd.h>

于 2014-10-19T16:46:37.350 に答える