Страница 1 из 1

CreateProcess Linux

Добавлено: 18 июл 2005, 14:57
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:

Добавлено: 18 июл 2005, 16:38
daermon
Читай про fork, exec и wait

Добавлено: 02 авг 2005, 12:26
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 запишет рузультат, а родитель потом его прочитает от туда....

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

Добавлено: 02 авг 2005, 13:32
Llama
unq, да - код завершения. Все остальное - передавай через IPC - например каналы.

Добавлено: 02 авг 2005, 16:17
unq
Спасибо всем. Сделал