Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Помогите сис-вызовы Линух


Автор: comcon1 24.10.2005, 17:30
Вот вырезка из моей проги в линухе..

Код

        int childPID = fork();
        assert (childPID != -1);
    if ( childPID == 0 ) {
          execvp(_gms_exec, arglist);
          throw EFatal(30, _gms_exec);
        } else {
          int statu;
          cout << "waiting for estimation finished..." << std::flush;
          wait (&statu); 
          if ( WIFEXITED(statu) == 0 ) throw 
            EFatal(30, _gms_exec);
          if ( WEXITSTATUS(statu) != 0) throw 
            EFatal(16, _gms_exec);
         }


Подскажите, как это будет выглядеть в Win32, насчет fork-exec я примерно знаю. А вот что в винде с сигналами -- нет.

PS - EFatal -- это моё исключение...
Заранее спасибо

Автор: _hunter 24.10.2005, 17:36
а что эти сигналы делать должны?

Автор: comcon1 24.10.2005, 17:39
"не вызвался" и "плохо завершился"

Автор: _hunter 24.10.2005, 17:55
если я правильно понял и этот сигнал -- результат выполнения функции создания потока -- тогда "не вызвался" -- результат CreateProcess() а "плохо завершился" -- GetExitCodeProcess() после WaitForSingleObject() для handle-а процесса

Автор: comcon1 24.10.2005, 18:06
Спасибо, но я думаю мне подойдет WinExec. Как выставить второй параметр, чтобы консольное приложение запускалось в том же Шел-е, что и вызвавшее его ??
SW_HIDE ?? или так вообще нельзя..??

Автор: _hunter 24.10.2005, 18:12
для WinExec() это поведение не настраивается...

Автор: comcon1 24.10.2005, 18:49
А для CreateProcess?? -- там такая туча параметров в MSDN-e smile

Автор: _hunter 24.10.2005, 19:00
а для него это поведение по умолчанию ( если нужна новая консоль -- это нужно указать в dwCreationFlags )

Автор: comcon1 24.10.2005, 19:17
О!!! В натуре то, что надо!!

Плеез, напиши, плееез, пример запуска через CreateProcess, как расставлять вход-параметры. А что надо будет поменять -- я уж сам посмотрю. :-)

Или дай ссылку на исходник с примером, а то на MSDN-е примера нет.
--------------------
Я пока через WinExec сделал, чтоб скомпилилось, но потом переделаю с CreateProcess.

Автор: _hunter 24.10.2005, 19:32
там, в принципе, все просто:
Код

STARTUPINFO startupInfo; ZeroMemory(&startupInfo, sizeof(startupInfo));
PROCESS_INFORMATION processInformation;

if ( CreateProcess(path, 
NULL,
NULL, 
NULL, 
FALSE,
0,
NULL,
NULL,
&startupInfo,
&processInformation
) )
{
}

Автор: comcon1 25.10.2005, 14:24
Большое спасибо!
Будем работать дальше!

Автор: _hunter 25.10.2005, 14:28
всегда пожалуйста smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)