The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Почему после exec остальная часть программы не выполняется?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Почему после exec остальная часть программы не выполняется?"
Сообщение от NetKnight emailИскать по авторуВ закладки on 26-Авг-03, 15:50  (MSK)
Вот такой код:

#include <stdio.h>
#include <stdlib.h>

void errmsg(char *name)
{
printf("Usage: %s {start|stop} {105|106}\n",name);
exit(0);
}

void errfil()
{
printf("Error: File flags.conf is not found!\n");
exit(0);
}

int main(int argc, char **argv)
{
char f[2],uf,ff,*act,*cl,*name=argv[0];
FILE *fil;
int pos;

if (argc<3) errmsg(name);

if (strcmp(argv[1],"start")==0) { act="-D"; uf='1'; }
else if (strcmp(argv[1],"stop")==0) { act="-I"; uf='0'; }
else { errmsg(name); }

if (strcmp(argv[2],"105")==0)
{
  cl="105";
  pos=0;
}
else if(strcmp(argv[2],"106")==0)
{
  cl="106";
  pos=1;
}
else { errmsg(name); }

if ((fil=fopen("flags.conf","r"))==0) errfil();
fscanf(fil,"%s",&f);
fclose(fil);

ff=f[pos];
f[pos]=uf;

if(ff!=uf)
{
  execlp("/usr/local/sbin/iptables","iptables","-t","nat",act,"PREROUTING","-j",cl,NULL);
  perror("Exec error");
  exit(1);
}
else
{ printf("Error: Nothing to change!"); }

if ((fil=fopen("flags.conf","w"))==0) errfil();
fprintf(fil,"%s",f);
fclose(fil);

return 0;
}

Почему-то после execlp ничего не выполняется, но программа отрабатывает без ошибок. В чём грабли? Может я экзек не правильно юзаю?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Почему после exec остальная часть программы не выполняется?"
Сообщение от XMan Искать по авторуВ закладки on 26-Авг-03, 18:07  (MSK)
Угу. Ты абсолютно прав - неправильно :)
Ты маны читал ? В частности, "man exec". Там же самое первое предложение гласит:

"Семейство функций exec заменяет текущий образ процесса новым образом процесса."

То есть, твоя программа выбрасывается из памяти, а на её место ставится то, что ты исполняешь с помощью exec. Потому обычно используется связка fork+exec. Типа, сначала делаешь fork(), а потом в потомке exec.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Почему после exec остальная часть программы не выполняется?"
Сообщение от NetKnight emailИскать по авторуВ закладки on 26-Авг-03, 22:06  (MSK)
>То есть, твоя программа выбрасывается из памяти, а на её место ставится
>то, что ты исполняешь с помощью exec. Потому обычно используется связка
>fork+exec. Типа, сначала делаешь fork(), а потом в потомке exec.
Ясно, вот только у меня ничего не находит на man exec.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Почему после exec остальная часть программы не выполняется?"
Сообщение от XMan Искать по авторуВ закладки on 27-Авг-03, 22:46  (MSK)
Ну ты это... Взгляни в правый верхний угол. Видишь ссылку "MAN'ы" ? Вот - тебе туда. В русские библиотечные вызовы. Там найдешь :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Почему после exec остальная часть программы не выполняется?"
Сообщение от NetKnight Искать по авторуВ закладки on 28-Авг-03, 12:20  (MSK)
>Ну ты это... Взгляни в правый верхний угол. Видишь ссылку "MAN'ы" ?
>Вот - тебе туда. В русские библиотечные вызовы. Там найдешь :)
>


О! Спасибо, разобрался... А можно такие маны себе на машину поставить? Или хелпа есть какие-нибудь?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Почему после exec остальная часть программы не выполняется?"
Сообщение от XMan Искать по авторуВ закладки on 28-Авг-03, 21:20  (MSK)
Так они обычно во всех дистрибутивах идкт. По крайней мере, в RH/ASP пакет называется "man-pages.....rpm". Есть еще "man-pages-ru....rpm"
  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Почему после exec остальная часть программы не выполняется?"
Сообщение от NetKnight emailИскать по авторуВ закладки on 29-Авг-03, 12:24  (MSK)
>Так они обычно во всех дистрибутивах идкт. По крайней мере, в RH/ASP
>пакет называется "man-pages.....rpm". Есть еще "man-pages-ru....rpm"
У меня FreeBSD, а маны какие-то стоят... Как поставить библиотечные? Точнее как они точно называются?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Почему после exec остальная часть программы не выполняется?"
Сообщение от Арлекин Искать по авторуВ закладки on 29-Авг-03, 08:30  (MSK)
>>Ну ты это... Взгляни в правый верхний угол. Видишь ссылку "MAN'ы" ?
>>Вот - тебе туда. В русские библиотечные вызовы. Там найдешь :)
>>
>
>
>О! Спасибо, разобрался... А можно такие маны себе на машину поставить? Или
>хелпа есть какие-нибудь?


Основные маны живут в /usr/share/man, /usr/local/share/man
Доступность управляется переменной MANPATH

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру