CreateProcess Linux

Все о программировании под *nix
unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

CreateProcess Linux

Сообщение unq »

Люди, нужна помощь... Чего-то не могу понять, как запустить какой-нить exefile из приложения и получить результат его работы. Под Win все просто:

unsigned long flag = 0;
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi;

// app_name - path for executable file
// app_param - params for executable file
app_<<app_name<<" "<<app_param;

BOOL r = CreateProcess(NULL,(char*)app_.str().c_str(),NULL,NULL,FALSE,flag,NULL,NULL,&si,&pi);
WaitForSingleObject( pi.hProcess, INFINITE );
if (r == 0) {
unsigned long returned = GetLastError();
cout<<"CreateProcess failed, error = "<<returned;
return -1;
}

DWORD ExitCode;
BOOL bRes = FALSE;
if(pi.hProcess)
bRes = GetExitCodeProcess(pi.hProcess, &ExitCode);
if(!bRes){
cout<<"GetExitCodeProcess failed";
return -1;
}

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

return ExitCode;

Кто-нить делал такое под Линукс? Я чего-то не могу понять :oops:

Аватара пользователя
daermon
Заглянувший
Сообщения: 14
Зарегистрирован: 13 авг 2004, 00:17
Откуда: Minsk

Сообщение daermon »

Читай про fork, exec и wait
Ум подобен желудку. Важно не то, сколько ты в него вложишь, а то сколько он сможет переварить.

unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

Сообщение unq »

почитал. вроде как понятно, как запустить proccess. Но вопростом остается результат работы child:

switch(child_pid=fork()){
case (pid_t)-1;//error
break;
case (pid_t)0;//child
execv(/tmp/exec_app,............);
_exit(10);
default:
pid = waitpid(child_pid,&status,0);
}

после такого, в status положится '10' ( _exit(10) ). Но мне надо чтобы в родителе я получил результат, который возвращает main() exec_app!

GetExitCodeProcess(pi.hProcess, &ExitCode) в WIN32 именно это и возвращает. как быть? ето вообще возможно? я имею ввиду без использования файла, например, в который exec_app запишет рузультат, а родитель потом его прочитает от туда....

unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

Сообщение unq »

фактически execv возвращает результат выполнения другого приложения. но возможно получить только один байт? 0-255 ?

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

unq, да - код завершения. Все остальное - передавай через IPC - например каналы.
Опыт растет прямо пропорционально выведенному из строя оборудованию

unq
Интересующийся
Сообщения: 53
Зарегистрирован: 05 июл 2004, 00:58

Сообщение unq »

Спасибо всем. Сделал

Ответить