0

質問は次のように与えられます。

Win32 API で CreateProcess () を使用します。この場合、CreateProcess() から呼び出される別のプログラムを指定する必要があります。フィボナッチ数列を出力する子プロセスとして実行されるのは、この別のプログラムです。必要なエラー チェックを実行して、コマンド ラインで負でない数値が渡されるようにします。

私は次のことをしました。エラーメッセージは表示されません。実行しようとすると、自動的に終了します。

#include <sys/types.h>
#include <windows.h>
#define _WIN32_WINNT 0x0501

#include <stdio.h>

int main()
{

  STARTUPINFO si;   
  PROCESS_INFORMATION  pi;   
  int a=0, b=1, n=a+b,i,ii;  

  ZeroMemory(&si, sizeof(si));

  si.cb = sizeof(si);


  if(! CreateProcess("C:\\WINDOWS\\system32\\cmd.exe",NULL,NULL,NULL,FALSE,0,
                     NULL,NULL,&si,&pi))
    printf("\nSorry! CreateProcess() failed.\n\n");
  else{    
    printf("Enter the number of a Fibonacci Sequence:\n");
    scanf("%d", &ii);

    if (ii < 0)
      printf("Please enter a non-negative integer!\n");
    else
    {         
      {
         printf("Child is producing the Fibonacci Sequence...\n");
         printf("%d %d",a,b);
         for (i=0;i<ii;i++)
         {
            n=a+b;
            printf("%d ", n);
            a=b;
            b=n;
         }
         printf("Child ends\n");
      }

      {
         printf("Parent is waiting for child to complete...\n");
         printf("Parent ends\n");
      }
    }
  }

  WaitForSingleObject(pi.hProcess, 5000);    
  printf("\n");

  // Close process and thread handles.    
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);

  return 0;
}

私は何を間違っていますか?

4

3 に答える 3

2

あなたは自分の運動を誤解したと思います。また、CreateProcessの使用中に継承を処理することもできます。これはあなたのスキルレベルを超えているかもしれませんが、それでも役立つレッスンです: http ://support.microsoft.com/kb/q190351/

于 2009-09-19T08:26:59.803 に答える
0

質問は、フィボナッチ数列を出力するプロセスを生成することを示しています。メイン プロセスでユーザー入力を取得/検証し、別のプログラム (個別に記述) を生成して、フィボナッチ数列を出力します。コマンドライン パラメータとして、生成されたプロセスにユーザー入力を渡します。

于 2009-09-14T15:30:38.223 に答える
0

なぜあなたはcmd.exeあなたのプロセスとして呼び出すのですか?問題は、フィボナッチ数列を印刷する必要があるのは、起動しているプロセスであると述べています。メインプロセス/アプリでそれを行うべきではありません。

必要なのは、単一の引数を取り、フィボナッチ数列から多くの項目を出力する別のプログラムです。メイン プログラムは、ユーザーに番号を要求し、この番号を引数として渡して他のプログラムを起動する必要があります。

于 2009-09-14T15:24:51.117 に答える