![]() |
|
Модераторы: xvr |
![]()
|
|
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
и так возник у меня вопрос
есть аналог CreateProcess или нет? всякие fork execve .... не то к примеру запустить /bin/calc.exe как мне ? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: 1 Всего: 25 |
А чем тебе fork()+execve() не подходят в данном случае?
-------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
в win32 CreateProcess - API OS
fork - системный вызов POSIX так что нужно отбросить неприязнь к fork |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
я понял так после маночитания fork - создает копию процесса который его вызвал execv - замешает процесс который его вызвал на процесс указаный там в аргументах тоесть ты как я понял предлогаещ делать сначала форк а потом ехес както не по програмерски а одной функ никак нельзя? -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 1 Всего: 48 |
Можно через
int system(const char *string); -------------------- Account removed |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
Guest
причем тут неприязнь? Sun ну так ето к syscalls не относится так понимаю -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: 1 Всего: 25 |
Разве что как Sun сказал system-ом, но я уверен что внутри все равно происходит fork+exec. Вообше у нас все процессы так создаются - создается копия процесса и после этого код новой проги загружается в память копии. Добавлено @ 17:17 Все процессы на системе происходят от init процесса, т.е. init является родителем всех - если умирает init - умирают и все процессы -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
а как процессу понять кто он?
копия или оригинал? а то так и будет запускатся до безконечности -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: 1 Всего: 25 |
oleg1973
Что будет запускаться до бесконечности? if (fork()==0) { //ребенок //делаем execve(...) - процесс перетирается //тут проверяем return код ехecve - ф-ция вернется только в том случае если процесс //по какой то причине не смог перетереться - в противном случае мы даже не доидем до этой //строчки } else { //родитель } -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
ааа вот оно как
все понял и родил
Добавлено @ 17:39 хотя конешно вы господа люниксоиды и извращенцы не могли createprocess придумать -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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, флаги); } -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
так а если я запускаю некий файл
как мне прочитать его оутпут? и передать sys_write sys_read -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| dargaard |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 450 Регистрация: 7.5.2004 Репутация: 1 Всего: 25 |
oleg1973 так сразу и не напишу - надо посидеть чуток. почитай ман по dup() и dup2() - если мне не изменяет память то с помошью этих ф-ций можно перенаправить output вызываемой проги куда нить еше.
Можешь еше man pipe почитать С работы покопаюсь в исходниках своего шела посмотрю как там pipe сделан - но помню что с dup() и pipe() -------------------- Ты должна сделать добро из зла потому что его больше не из чего сделать. Р.П.Уоррен |
|||
|
||||
| Sun |
|
||||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 1 Всего: 48 |
Самый простой путь через popen().
Это в Windows извращенцы - засунуть в функцию CreateProcess 10 параметров, часть из которых еще и указатели на сложные структуры. -------------------- Account removed |
||||
|
|||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Философский вопрос: если все процессы под Linux делаются путём fork, то как запускается самый первый процесс?
Добавлено @ 05:20
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 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |