Хрестоматия по программированию на Си в Unix


Системные вызовы и взаимодействие с UNIX. Хрестоматия по программированию на Си в Unix - стр. 8


struct itimerval new, old; /* struct itimerval содержит поля: struct timeval it_interval; struct timeval it_value;

Где struct timeval содержит поля: long tv_sec; -- число целых секунд long tv_usec; -- число микросекунд */ struct sigaction new_vec, old_vec;

if (usec == 0) return;

/* Поле tv_sec содержит число целых секунд. Поле tv_usec содержит число микросекунд.

it_value - это время, через которое В ПЕРВЫЙ раз таймер "прозвонит", то есть пошлет нашему процессу сигнал SIGALRM.

Время, равное нулю, немедленно остановит таймер.

it_interval - это интервал времени, который будет загружаться в таймер после каждого "звонка" (но не в первый раз).

Время, равное нулю, остановит таймер после его первого "звонка". */ new.it_interval.tv_sec = 0; new.it_interval.tv_usec = 0; new.it_value.tv_sec = usec / 1000000; new.it_value.tv_usec = usec % 1000000;

/* Сохраняем прежнюю реакцию на сигнал SIGALRM в old_vec, заносим в качестве новой реакции do_nothing() */ new_vec.sa_handler = do_nothing; sigemptyset(&new_vec.sa_mask); new_vec.sa_flags = 0;

sighold(SIGALRM); sigaction(SIGALRM, &new_vec, &old_vec);

/* Загрузка интервального таймера значением new, начало отсчета. * Прежнее значение спасти в old. * Вместо &old можно также NULL - не спасать. */ setitimer(ITIMER_REAL, &new, &old);

/* Ждать прихода сигнала SIGALRM */ sigpause(SIGALRM);

/* Восстановить реакцию на SIGALRM */ sigaction(SIGALRM, &old_vec, (struct sigaction *) 0); sigrelse(SIGALRM);

/* Восстановить прежние параметры таймера */ setitimer(ITIMER_REAL, &old, (struct itimerval *) 0); }

* - Время модификации файла можно изменить на текущее астрономическое время и не производя записи в файл. Для этого используется вызов

© Copyright А. Богатырев, 1992-95
Си в UNIX

| |




- Начало -  - Назад -  - Вперед -