Статьи Галерея Форум Чат Файлы HowTo Ссылки Поиск
Текущее время: 19 сен 2019, 10:32




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: CreateProcess Linux
СообщениеДобавлено: 18 июл 2005, 14:57 
Интересующийся

У нас с: 05.07.2004
Сообщения: 53
Люди, нужна помощь... Чего-то не могу понять, как запустить какой-нить 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 
Заглянувший
Аватара пользователя

У нас с: 13.08.2004
Сообщения: 14
Откуда: Minsk
Читай про fork, exec и wait

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


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 авг 2005, 12:26 
Интересующийся

У нас с: 05.07.2004
Сообщения: 53
почитал. вроде как понятно, как запустить 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 
Интересующийся

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


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 авг 2005, 13:32 
Неотъемлемая часть форума
Аватара пользователя

У нас с: 06.02.2002
Сообщения: 9760
Откуда: Менск
unq, да - код завершения. Все остальное - передавай через IPC - например каналы.

_________________
Опыт растет прямо пропорционально выведенному из строя оборудованию


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: 02 авг 2005, 16:17 
Интересующийся

У нас с: 05.07.2004
Сообщения: 53
Спасибо всем. Сделал


Вернуться к началу
 Не в сети Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
[ All resources are available under GNU GPL ] [ Support ] [ Hosted by DataHata | MyCloud.by ] [ Powered by phpBB® Forum Software © phpBB Group ]

LVEE Winter LVEE Rambler's Top100