Проблема запуска процесса с CreateProcess () - PullRequest
0 голосов
/ 14 сентября 2009

Вопрос задается так:

Использование CreateProcess () в Win32 API. В этом случае вам нужно будет указать отдельную программу, которая будет вызываться из 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;
}

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2009

Я думаю, вы неправильно поняли упражнение. Кроме того, вы можете захотеть обрабатывать наследование при использовании CreateProcess. Это может быть выше вашего уровня квалификации, но все же полезный урок: http://support.microsoft.com/kb/q190351/

0 голосов
/ 14 сентября 2009

Вопрос говорит о том, что порождает процесс, который выводит последовательность Фибоначчи. Получите / подтвердите пользовательский ввод в основном процессе, затем создайте другую программу (написанную отдельно), чтобы напечатать последовательность Фибоначчи. Передайте пользовательский ввод в порожденный процесс в качестве параметра командной строки.

0 голосов
/ 14 сентября 2009

Почему вы используете cmd.exe в качестве процесса? Проблема заключается в том, что запускаемый вами процесс должен печатать последовательность Фибоначчи. Вы не должны делать это в основном процессе / приложении.

То, что у вас должно быть, - это отдельная программа, которая принимает один аргумент и печатает столько элементов из последовательности Фибоначчи. Ваша основная программа должна запросить у пользователя номер, а затем запустить другую программу, передав в качестве аргумента этот номер.

...