0

私はファイルを読み取り、それを処理し、結果を出力ファイルに入れるプログラムを持っています。引数(入力ファイル)がある場合は、出力ファイルを作成して内容を書き込みます。

stdoutをwrite()コンテンツにリダイレクトするために、fork()を作成しました。

char *program;

program = malloc(80);

sprintf(program, "./program < %s > %s", inputFile, outputFile);   
int st;
switch (fork()) {
  case -1:
       error("fork error");
         case 0:
           /* I close the stdout */
           close (1);

             if (( fd = open(outputfile, O_WRONLY | O_CREAT , S_IWUSR | S_IRUSR | S_IRGRP)==-1)){

                 error("error creating the file \n");
                 exit(1);
             }

             execlp("./program", program,  (char *)0);

             error("Error executing program\n");
              default:
          // parent process - waits for child's end and ends
            wait(&st);
            exit(0);
     //*****************

              }

子は<>stdinを使用して適切に作成され、stdoutファイルが作成されます。しかし、子は決して終了せず、私が父を殺すと、出力ファイルが空になるため、コードは実行されませんでした。

何が起こっている?ありがとう!

4

1 に答える 1

1

execファミリの関数は、リダイレクトを理解していません

あなたが呼んでいる方法ではexeclp、あなたはあなたのプログラムに1つの引数を渡しています:./program < %s > %s。そうです、一つの議論です。もちろん、execlpリダイレクトが何であるかを知りませんし、どちらも知りませんprogram

すべてのコードを次のように置き換えます。

char *program = malloc(LEN);

snprintf(program, LEN, "./program < %s > %s", inputFile, outputFile);  
system(program);
于 2012-04-04T16:38:35.977 に答える