Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateProcess, subj 
:(
    Опции темы
oleg1973
Дата 5.1.2005, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



и так возник у меня вопрос smile))
есть аналог CreateProcess или нет?
всякие fork execve .... не то
к примеру запустить /bin/calc.exe как мне ? smile


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
dargaard
Дата 6.1.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 1
Всего: 25



А чем тебе fork()+execve() не подходят в данном случае?


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
Guest
Дата 6.1.2005, 16:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











в win32 CreateProcess - API OS
fork - системный вызов POSIX
так что нужно отбросить неприязнь
к fork
  Вверх
oleg1973
Дата 6.1.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34




я понял так после маночитания
fork - создает копию процесса который его вызвал
execv - замешает процесс который его вызвал на процесс указаный там в аргументах

тоесть ты как я понял предлогаещ делать сначала форк а потом ехес
както не по програмерски smile
а одной функ никак нельзя?


smile


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Sun
Дата 6.1.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 1
Всего: 48



Можно через
int system(const char *string);


--------------------
Account removed
PM MAIL   Вверх
oleg1973
Дата 6.1.2005, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



Guest
причем тут неприязнь? smile

Sun
ну так ето к syscalls не относится так понимаю


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
dargaard
Дата 6.1.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 1
Всего: 25



Цитата(oleg1973 @ 6.1.2005, 06:00)
тоесть ты как я понял предлогаещ делать сначала форк а потом ехес
както не по програмерски

Разве что как Sun сказал system-ом, но я уверен что внутри все равно происходит fork+exec. Вообше у нас все процессы так создаются - создается копия процесса и после этого код новой проги загружается в память копии.
Добавлено @ 17:17
Все процессы на системе происходят от init процесса, т.е. init является родителем всех - если умирает init - умирают и все процессыsmile



--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 6.1.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



а как процессу понять кто он?
копия или оригинал?
а то так и будет запускатся до безконечности


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
dargaard
Дата 6.1.2005, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 1
Всего: 25



oleg1973
Что будет запускаться до бесконечности?
if (fork()==0) {
//ребенок
//делаем execve(...) - процесс перетирается
//тут проверяем return код ехecve - ф-ция вернется только в том случае если процесс
//по какой то причине не смог перетереться - в противном случае мы даже не доидем до этой
//строчки
} else {
//родитель
}


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 6.1.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



ааа вот оно как
все понял и родил
Код

mov eax,SYS_fork
int 0x80
test eax,eax
jnz
...
mov eax,SYS_execv
int 0x80



Добавлено @ 17:39
хотя конешно вы господа люниксоиды и извращенцы smile
не могли createprocess придумать smile


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
dargaard
Дата 6.1.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 1
Всего: 25



з.ы. Если надо дождаться пока новый процесс не выполнится то в родителе изпользуем wait() или waitpid().
pid = fork();

if (pid==0) {
execv (...);
printf("Error occured\n");
exit(0);
} else {
printf("Child is %d - ждемс пока не выполнится\n",pid);
waitpid(pid,0, флаги);
}


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 6.1.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: нет
Всего: 34



так а если я запускаю некий файл
как мне прочитать его оутпут? и передать
sys_write sys_read



--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
dargaard
Дата 6.1.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 1
Всего: 25



oleg1973 так сразу и не напишу - надо посидеть чуток. почитай ман по dup() и dup2() - если мне не изменяет память то с помошью этих ф-ций можно перенаправить output вызываемой проги куда нить еше.
Можешь еше man pipe почитатьsmile
С работы покопаюсь в исходниках своего шела посмотрю как там pipe сделан - но помню что с dup() и pipe()smile


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
Sun
Дата 6.1.2005, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 1
Всего: 48



Цитата(oleg1973 @ 6.1.2005, 14:43)
так а если я запускаю некий файл
как мне прочитать его оутпут? и передать
sys_write sys_read

Самый простой путь через popen().
Цитата
хотя конешно вы господа люниксоиды и извращенцы

Это в Windows извращенцы - засунуть в функцию CreateProcess 10 параметров, часть из которых еще и указатели на сложные структуры.


--------------------
Account removed
PM MAIL   Вверх
Vit
Дата 18.1.2005, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: нет
Всего: 207



Философский вопрос: если все процессы под Linux делаются путём fork, то как запускается самый первый процесс?
Добавлено @ 05:20
Цитата(Sun @ 6.1.2005, 09:41)
Это в Windows извращенцы - засунуть в функцию CreateProcess 10 параметров, часть из которых еще и указатели на сложные структуры.


WinExec - 2 параметра!


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.