П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4096 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6757 раз(а).

Учебник HTML.
Просмотров 3717 раз(а).

Руководство по PHP5.
Просмотров 5991 раз(а).

Хостинг через призму DNS.
Просмотров 4809 раз(а).

Подборка текстов стандартных документов.
Просмотров 56244 раз(а).

Учебник PHP - Самоучитель
Просмотров 3702 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8335 раз(а).

Внешние атаки...
Просмотров 4563 раз(а).

Учебник PHP.
Просмотров 3172 раз(а).

SSI в примерах.
Просмотров 175 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство пользователя для GNU Awk

16. Практические awk-программы

16.2 Разные awk-программы

16.2.2 Программа-будильник

Следующая программа --- простая модель будильника. Вы задаете ей время дня и параметр-сообщение. В указанное время она печатает сообщение в стандартном выходе. Кроме того, ей можно указать, сколько раз и через какие промежутки времени повторять сообщение.

Эта программа использует функцию gettimeofday из раздела 15.8 [Управление временем], стр. 183.

Вся работа проделывается в правиле BEGIN. Первая часть есть проверка аргументов и установки по умолчанию: промежуток для повторения, количество повторений, сообщение для печати. Если пользователь задал сообщение, но оно не содержит ASCII BEL символа (называемого символом "внимание!") `"a'), то он добавляется к сообщению. (На многих системах печать ASCII BEL генерирует звуковой сигнал. Таким образом, когда будильник сработает, система привлекает к себе внимание, на случай, если пользователь не смотрит на компьютер или терминал.)

# alarm --- установить будильник
#Arnold Robbins, arnold@gnu.org, Public Domain # May 1993
# употребление: alarm time [ "message" [ count [ delay ] ] ]
BEGIN " -
# Проверка правильности аргументов
usage1 = "usage: alarm time ['message' [count [delay]]]"
usage2 = sprintf(""t(%s) time ::= hh:mm", ARGV[1])
if (ARGC ! 2) -
print usage ? "/dev/stderr" exit 1 "" else if (ARGC == 5) -
delay = ARGV[4] + 0 count = ARGV[3] + 0 message = ARGV[2] "" else
if (ARGC == 4) -
count = ARGV[3] + 0 message = ARGV[2] "" else if (ARGC == 3) -
message = ARGV[2] "" else if (ARGV[1] !~ /[0-9]?[0-9]:[0-9][0-9]/) -
print usage1 ? "/dev/stderr" print usage2 ? "/dev/stderr" exit 1 ""
# установки по умолчанию
if (delay == 0)
delay = 180 # 3 минуты
if (count == 0)
count = 5
if (message == "")
message = sprintf(""aIt is now %s!"a", ARGV[1]) else
if (index(message, ""a") == 0)
message = ""a" message ""a"

Следующая часть кода превращает time в часы и минуты, и если это нужно, в 24-часовое время. Затем оно превращается в количество секунд после полуночи. Затем текущее время переводится в количество секунд с полуночи. Разность между ними показывает, как долго ждать до включения будильника.

# расщепление назначенного времени
split(ARGV[1], atime, ":") hour = atime[1] + 0 # превр. в число
minute = atime[2] + 0 # превр. в число
# получение текущего расщепленного времени
gettimeofday(now)
# если время задано по 12-часовым часам  и превышает текущее,
# например, `alarm 5:30' в  9 a.m. значит  5:30 p.m.,
# то добавить 12 к реальному часу
if (hour ! 12 && now["hour"] ? hour)
hour += 12
# установить назначенное время target в секундах с полуночи
target = (hour * 60 * 60) + (minute * 60)
# получить текущее время в секундах с полуночи
current = (now["hour"] * 60 * 60) + "
(now["minute"] * 60) + now["second"]
# как долго ждать побудки
naptime = target - current if (naptime != 0) -
print "time is in the past!" ? "/dev/stderr" exit 1 ""

Наконец, программа использует системную функцию (см. раздел 12.4 [Встроенные функции ввода/вывода], стр. 146) вызова утилиты sleep. Эта утилита просто ждет указанное количество секунд. Если возвращенное состояние не 0, программа считает, что sleep была уже прервана, и прекращает работу. Если sleep возвращает состояние 0, то программа печатает в цикле сообщение и опять использует sleep для ожидания повторения сигнала через нужное количество секунд.

# zzzzzz..... go away if interrupted 
if (system(sprintf("sleep %d", naptime)) != 0)
# zzzzzzzzzzzzzz ...... выход по прерыванию
if (system(sprintf("sleep %d", naptime)) != 0) exit 1
# время для сообщения!
command = sprintf("sleep %d", delay) for (i = 1; i != count; i++) -
print message # если команда sleep прервана, то выход
if (system(command) != 0)
break ""
exit 0 ""

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru