Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2012, 03:04   #1
Demqieff
 
Регистрация: 20.11.2012
Сообщений: 5
По умолчанию Linux, создание дочернего процесса, fork() и execl()

У меня такая проблема, я должен запустить дочерний процесс по коду, написанному в отдельном файле son.c. Что я не так делаю или может я не правильно понимаю как работает execl()? Я пробовал поставить выводить по execl дату (execl("/bin/date", "date", NULL), все получалось, с son.c же не получается. Проблема в этом?

Вот код parent.cpp:
Код:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>

int main()
{
int pid, ppid, status;
pid = getpid();
ppid = getppid();
printf("Father param: pid=%i ppid=%i\n", pid, ppid);
if (fork() == 0) execl("/home/arsen/codelite/son.c", "son.c", NULL);
wait(&status);
return 0;
}
в коде son.c простой вывод строки:
Код:
#include <stdio.h>

int main()
{
printf("Child\n");
return 0;
}

Последний раз редактировалось Demqieff; 20.11.2012 в 16:36.
Demqieff вне форума Ответить с цитированием
Старый 20.11.2012, 12:45   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

А вы запустите son.c вручную из командной строки.
waleri вне форума Ответить с цитированием
Старый 20.11.2012, 17:39   #3
Demqieff
 
Регистрация: 20.11.2012
Сообщений: 5
По умолчанию

А вы бы не могли уточнить какой командой это сделать? Я только-только изучаю linux.
Я делаю так, перехожу в терминале с помощью cd в директорию где лежит файл и просто пишу:
Код:
./son.c
Правильно запускаю?
Выскакивает строка:
bash: ./son.c: Отказано в доступе
Demqieff вне форума Ответить с цитированием
Старый 20.11.2012, 17:41   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

son.c - это, по-Вашему, исполняемый файл? А если нет, то как бедная ОС должна его запустить?
Abstraction вне форума Ответить с цитированием
Старый 20.11.2012, 17:48   #5
Demqieff
 
Регистрация: 20.11.2012
Сообщений: 5
По умолчанию

Кажется понял, сначала нужно скомпилировать с помощью строки
Код:
gcc son.c
а потом запустить полученный a.out. Я прав?
В этом случае я получил строку "Child".
Demqieff вне форума Ответить с цитированием
Старый 20.11.2012, 17:55   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Правы или нет - решайте сами, меня формулировка
Цитата:
должен запустить дочерний процесс по коду, написанному в отдельном файле son.c
откровенно сбивает с толку. Вроде так Вы вполне себе запускаете дочерний процесс по коду, написанному в файле son.c.
Abstraction вне форума Ответить с цитированием
Старый 20.11.2012, 18:15   #7
Demqieff
 
Регистрация: 20.11.2012
Сообщений: 5
По умолчанию

Как я понимаю у меня есть два файла. parent.c и child.c. Я компилирую и запускаю parent, тот порождает дочерний процесс и этот самый дочерний процесс исполняет код написанный в файле child.c. В итоге я должен увидеть что-то вроде этого:
Код:
Father param: pid=3037 ppid=2649
Child
Будьте любезны, скажите что я делаю не так, если это возможно более развернуто. Если я и правда запускаю дочерний процесс по коду son.c, то разве текст "Child" не должен отобразиться?

Последний раз редактировалось Demqieff; 20.11.2012 в 18:27.
Demqieff вне форума Ответить с цитированием
Старый 20.11.2012, 18:23   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Будьте любезны, скажите что я делаю не так, если это возможно более развернуто. Если я и правда запускаю дочерний процесс по коду son.c, то разве текст "Child" не должен отобразиться?
Можете сначала развёрнуто объяснить, чего не так? Текст Child должен отобразиться - вот он и отображается. Только при таком подходе - если уж быть дотошным, - исполняется код файла a.out, полученный в результате компиляции child.c.
Abstraction вне форума Ответить с цитированием
Старый 20.11.2012, 18:27   #9
Demqieff
 
Регистрация: 20.11.2012
Сообщений: 5
По умолчанию

Конечно могу)
Я когда запускаю parent вижу только сообщение:
Код:
Father param: pid=3037 ppid=2649
Press ENTER to continue...
Текст Child я вовсе не вижу.
Demqieff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание дочернего класса cargo29 PHP 1 13.10.2012 18:41
Передача значения из дочернего процесса в родительский MrGukk Общие вопросы C/C++ 0 03.09.2012 20:03
Создание временного и дочернего окна! DraGOU Win Api 2 24.11.2011 22:49
Создание дочернего окна ARt44 Win Api 6 01.10.2011 00:50
Завершение отлаживаемого дочернего процесса dudeboy Общие вопросы Delphi 2 05.01.2010 15:34