Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по си 
:(
    Опции темы
Man with no name
Дата 27.9.2004, 12:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди, расскажите плиз, как работает функция wait()
просто есть такой кускусок:
...
argv++;
execvp(argv[0],argv);
wait(&status); <<<<вот тут надо дождаться завершения программы в argv;
printf("Exit code: ", status); <<< и вывести exitcode
...

программа запускает процесс, и в случае кривых аргументов выводит большой status, иначе (например пишу ls -l ) всё работает, но printf не печатается... В чём дело? И как могу потом узнать время выполнения программы.
  Вверх
dargaard
Дата 27.9.2004, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



прежде чем делать execvp делаи

if (fork()==0) {
execvp(argv[0],argv);
}

в противном случае ты просто выполняешь argv процесс в своеи програме, перетерая ее.

Добавлено @ 13:04
время выполнения можно измерить коммандои time ./program.out




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


Опытный
**


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

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



Код

#include <stdio.h>
                                                                               
int main(int argc, char **argv) {
   int status;
   if (argc<2) {
       printf("Error: \n");
       return;
   }
   argv++;
                                                                               
   //delaem novii protsess
   if (fork()==0) {
       execvp(argv[0],argv);
   }
   // zhdems zavershenia
   wait(&status);
   printf("Exit code: %d",status);
}



Это сообщение отредактировал(а) dargaard - 27.9.2004, 13:17


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


Unregistered











да, я понял, только вот ещё ведь и первый процесс выполняется, и поэтому в результате выводится в случае ошибки
Exit code: 124415241
Exit code: 0
что то не смог зашарить с проверкой что за процесс...
А так всё нормально, печатает 0...
И ещё, какая функция там за таймер отвечает, т.е. надо засеч начало и конец исполнения для подсчёта времени исполнения.
Но всё же спасибо за подсказку...

  Вверх
Guest
Дата 27.9.2004, 17:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











сорри, про таймер понял, не заметил там
  Вверх
dargaard
Дата 27.9.2004, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Guest @ 27.9.2004, 04:39)
да, я понял, только вот ещё ведь и первый процесс выполняется, и поэтому в результате выводится в случае ошибки

Код
   
    int status=0;
    ...
   if (fork()==0) {
       if (execvp(argv[0],argv)) {
           //oshibka
           return;
       }
   }


Добавлено @ 22:58
есть еше clock() функция

Код


   #include <time.h>
   ....
   clock_t t1,t2;
   double Time;

   t1=clock();
    ....
   t2 = clock();
   Time = ((double)(t2-t1))/CLOCKS_PER_SEC;
   printf("%f\n",Time);



--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




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


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

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