На главную Добавить в "Избранное" Связаться с нами
 
     
 
 

Введение Установка Linux Архитектура Linux Секреты работы Картинная галерея Статьи

 

 
   
 
 

Debian GNU/Linux : Paragon NTFS for Linux 5.x  : Panda Security for Linux Медиа-пак  : Gentoo Linux 2007.0 Xor Edition Nero Linux 3 : KNOPPIX : Fedora 10 : OpenSUSE 11.0 : ASPLinux 12 Standard : Свободный офис : ASPLinux 12 Express  Полный каталог

 
 

 

 

  Управление личной информацией  
 

at

выполнение задач в указанное время

b

порожденный shell фоновых задач

greet

своевременное приветствие с терминала

lastlog

сообщение времени последней регистрации

timelog

учет и статистика сеансов работы

today

печать календаря с отмеченной текущей датой

 

Управление делопроизводством

 

jargon

генератор технических терминов

phone

база данных с телефонными номерами

office

делопроизводитель

 

Введение

 

Мы уже многое знаем о файлах и о том, как управлять файловой структурой. Пора рассмотреть, как мы можем использовать систему UNIX для управления множеством задач, которые составляют наш рабочий день и держат нас в курсе того, что делают другие пользователи. Термин "управление личной информацией" (personal management) подразумевает, что вы хотите создать свою собственную ПЕРСОНАЛЬНУЮ рабочую среду и инструментальные средства. Мы предлагаем вам пакет программ, которые вы можете приспособить к вашим требованиям. Фактически мы в этой и следующей главе представляем четыре отдельных набора программ, каждый из которых посвящен определенному аспекту управления личной информацией.

 

Средства управления временем помогают нам спланировать выполнение задач компьютером, а также контролировать наше личное время. Управление делопроизводством имеет дело с хранением и извлечением информации, а также с организацией доступа к различным функциям системы UNIX посредством простого в использовании интерфейса в виде меню. Для каждой из этих областей деятельности мы даем ее обзор, а затем представляем соответствующую группу средств.

 

Управление временем

 

Поскольку система UNIX имеет встроенные функции поддержки времени и часы, она может следить за временем. Объединение функций поддержки времени с возможностью автоматического запуска группы команд означает, что мы можем настроить их так, чтобы компьютер выполнял многие наши рутинные работы, связанные со временем. Мы также можем использовать компьютер для отслеживания нашего собственного времени. В данном разделе представлены инструментальные средства at, b, greet, lastlog, timelog и today.

 

Командный файл at дает нам возможность сказать машине о том, что в указанное время необходимо сделать то-то и то-то (вывести на экран сообщение или выполнить какие-то другие команды). Задача запускается в фоновом режиме, так что мы можем продолжать другую работу, а фоновая задача выполнится автоматически в указанное время. Эта задача может состоять из любых разрешенных в UNIX команд, поэтому ее возможности очень гибкие. Мы просто предлагаем некоторые идеи, связанные с ее использованием.

 

Вторым средством является командный файл b. Это обработчик фоновых задач. Очень часто при порождении фоновых процессов мы не можем узнать, когда они закончились. Для того, чтобы это определить, нам необходимо вручную просмотреть таблицу процессов или найти какой-то иной признак того, что данная работа завершена. Командный файл b запускает задачу, управляет операциями ввода-вывода и затем сообщает нам о том, что задача завершена.

 

Командный файл greet показывает, каким образом переводить внутреннее время компьютера в более понятные пользователю категории. Он различает три перида суток (утро, день и вечер) и реагирует на них соответствующими сообщениями. Это довольно просто, но обеспечивает неплохое основание для подхода к решению других проблем, связанных со временем.

 

Далее мы представляем два средства, которые образуют базис системы управления временем. При выполнении множества работ нам необходимо подсчитать время, которое мы потратили на данный проект, чтобы мы могли выставить нашему клиенту соответствующий счет. Командный файл lastlog запускается автоматически, когда вы регистрируетесь в системе. Поддерживается база данных, в которую каждый раз записывается время вашей регистрации для последующего анализа или хранения записей. С этим инструментальным средством соседствует командный файл timelog. Это утилита, которая выполняет подсчет времени. Она может следить за общим временем, затраченным на любой указанный проект. Затем можно сгенерировать статистику, которая показывает, когда и сколько времени вы работали над каждым проектом.

 

Последнее средство, относящееся ко времени - это командный файл today. Это утилита, которая изменяет вид выходных данных команды UNIX cal. Она печатает обычный календарь, только текущая дата выводится в инверсном виде. Это очень наглядно. Вы можете развить этот инструмент для того, чтобы отмечать праздники или другие особые дни.

 

        Имя:  at

at - выполнить команду или файл в указанное время

 

Назначение

Переводит любую командную строку в фоновый режим и выполняет ее в заданное время.

 

Форма вызова

            at hr:min cmd [;cmd ...]

 

Пример вызова

            at 12:00 echo "time for lunch!"

В двенадцать часов дня выводит сообщение на экран терминала.

 

Текст программы at

    1  :

    2  # @(#) tree v1.0  Execute command line at specific time

    Author: Russ Sage

    2а            Выполнить командную строку в указанное время

         

    4  if [ $# -lt 2 ]

    5    then echo "at: wrong arg count"             >&2

    6         echo "usage: at hr:min cmd [;cmd ...]" >&2

    7         exit 1

    8  fi

     

    10 ITS=$1; shift

     

    12 while :

    13 do

    14       TIME=`date | cut -c12-16`

     

    16       if [ "$ITS" = "$TIME" ]

    17         then  eval $@

    18               exit 0

    19         else  sleep 35

    20       fi

    21 done &

 

Переменные среды выполнения

 

ITS

Время, в которое следует выполнить указанные команды

TIME

Текущее время в системе

 

Лписание

 

Зачем нам нужен at?

 

На протяжении рабочего дня мы выполняем много небольших работ, которые нужно делать через различные интервалы времени. Некоторые вещи просто должны быть сделаны один раз в любое время, тогда как другие должны делаться в определенное время каждый день. Например, вам может понадобиться запускать процедуру копирования файлов каждую ночь, входить в другую систему раз в день и проверять почту или сообщения пользователей сети по заданной теме раз в несколько дней.

 

Командный файл at предоставляет механизм для выполнения задач, связанных со временем. Мы можем сказать системе, что и когда мы хотим сделать. Задача остается "спящей" в фоновом режиме до назначенного времени. Это дает нам возможность превратить компьютер в будильник, секретаря, администратора встреч и т.д.

 

Данная концепция не нова и уже существует в системе Berkeley UNIX под тем же именем. Она реализована также в последних версиях System V. Почему же тогда мы представляем здесь нашу собственную версию? Одна из причин в том, что многие из вас имеют более ранние версии UNIX, в которых это средство отсутствует. Но важнее, видимо, другое наша цель не в том, чтобы сделать существующие команды at устаревшими, а в показе того, как легко отслеживать время и реализовывать обработку, связанную со временем. Имея нашу собственную команду at, мы можем настроить ее по своему вкусу и изменить ее, когда необходимо. Команда at, представленная здесь, фактически более гибкая, чем at в системе Berkeley, хотя в первой отсутствуют некоторые особенности второй. Она более гибкая потому, что вы можете поместить настоящие команды в фоновую задачу at, в то время как для at в системе Berkeley вы должны использовать имя командного файла интерпретатора shell. Метод Berkeley запрещает вам вызывать исполняемые модули непосредственно в командной строке, а наша at - нет. (Конечно, вы можете с таким же успехом использовать командные файлы интерпретатора shell, если вам это необходимо.)

 

Что делает at?

 

Команда at дает нам возможность собирать несколько команд в одно целое и впоследствии запускать их. Когда они выполняются, их вывод может либо идти на экран, либо перенаправляться в определенный файл. Командная строка принимает два параметра: время выполнения и командную строку, которую следует выполнить. Время выражено в формате час:минута. Час должен быть указан строкой из двух цифр (в диапазоне от 0 до 23 часов), так как его использует команда date. Использование того же стандарта, что и в команде date, значительно упрощает команду at. В качестве второго параметра может быть любая команда, которую обычно можно ввести в командной строке интерпретатора shell. Можно также использовать конвейеры, составные команды и переназначения. Нет ограничений на то, какая команда может быть выполнена. Команда at может запустить обычный исполняемый модуль UNIX или ваш собственный командый файл.

 

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

 

Команда at всегда запускается как фоновая задача. Нецелесообразно запускать ее в приоритетном режиме, где она блокирует терминал на все время своего выполнения. Пребывая в фоновом режиме, at освобождает ресурсы, но все же работает для вас. Между прочим, отметим, что когда процессы ставятся в фоновый режим изнутри командного файла, идентификатор процесса не печатается на экран, как это происходит, когда процессы запускаются в фоновом режиме с клавиатуры.

 

Порождение большого количества фоновых процессов может иметь отрицательный эффект для системы. Каждая фоновая задача - это цикл while интерпретатора shell, который работает очень медленно. Когда много фоновых процессов, мало времени центрального процессора остается на другие цели. В результате производительность системы ухудшается. В больших системах это, вероятно, не проблема, если только система не загружена множеством пользователей, но вы должны использовать это средство с осторожностью.

 

Отметим, что формат час:минута годится только для одного полного дня. Данная программа at задумана как ежедневная и не имеет средств запуска в определенный день или месяц, хотя вы можете легко расширить ее, как только поймете, как читается и используется информация о времени.

 

Примеры

 

           1. $ at 11:45 echo ^G^G It's almost lunch time

Без пятнадцати минут двенадцать дважды выдается звуковой сигнал (control-G) и выводится сообщение о ленче.

 

           2. $ at 10:45 "if [ -s $MAIL ]; then echo ^G You have mail; fi"

Без пятнадцати одиннадцать проверяется, существует ли мой почтовый файл и есть ли в нем хотя бы один символ ($MAIL есть /usr/spool/mail/russ). Если это так, выдается звуковой сигнал и сообщение о том, что у меня есть почта.

 

           3. $ at 17:00 "c; date; banner ' time to' ' go home'"

В пять часов вечера очищается экран (с помощью команды c, описанной далее в данной книге), печатается дата и выводится крупными буквами на весь экран сообщение "time to go home" ("пора домой"). С помощью апострофов в командной строке banner мы можем добиться вывода символа возврата каретки, чтобы разместить каждый набор слов в отдельной строке. Если какая-либо из этих команд не срабатывает (например, не найдена команда c), то и весь фоновый процесс оканчивается неудачей.

 

Пояснения

 

Прежде всего at проверяет, правильно ли она была вызвана. Строки 4-8 делают проверку ошибок. В командной строке должны присутствовать по крайней мере два параметра: время и команда. Если это так, то счетчик позиционных параметров равен 2. Если этот счетчик меньше 2, произошла ошибка. В стандартный файл ошибок посылаются сообщения об ошибке с помощью переадресации в файловый дескриптор 2.

 

Переменная интерпретатора shell ITS инициализируется в строке 10. В ней устанавливается значение первого позиционного параметра ($1), которым является час:минута. Как только мы занесли это значение в переменную, оно больше не нужно нам в командной строке. Команда shift удаляет $1 из командной строки. Теперь командная строка состоит из вызывающей команды $0 (т.е. самой at) и остатка строки ($@ или $*). Вызывающая команда не вычисляется как часть остатка строки, поэтому вам не нужно заботиться об аргументе $0.

 

Далее at переходит к вечному циклу while в строках 12-21. Вечным этот цикл делает команда : (двоеточие). Это встроенная команда интерпретатора shell, которая ничего не делает кроме того, что всегда возвращает успешный статус выхода, заставляя тем самым цикл продолжаться. Команда true интерпретатора shell очень похожа и делает программу более наглядной. Мы же используем : вместо true, чтобы сократить издержки на порождение процесса для каждой итерации цикла. Команда : встроена в сам shell. True, напротив, является внешней командой в каталоге bin (так же, как ls), она должна быть найдена по файловому пути, выполниться и вернуть значение. Это занимает гораздо больше процессорного времени.

 

На каждой итерации цикла текущее время сверяется с назначенным временем, переданным из командной строки. Текущее время извлекается из команды date в строке 14. Обычно date выдает результат в таком формате:

 

    |

    |        Mon Mar 31 06:54:25 PST 1986

    |

    |

 

Поскольку это строка фиксированного размера, мы можем посчитать номера позиций, в которых размещены час и минута. Данные час:минута находятся в позициях 12-16. Для получения этих символов мы запускаем команду date, пропускаем ее результат по конвейеру через cut и вырезаем нужные позиции. Весь результат присваивается переменной TIME. Заметим, что поле секунд не используется. Наименьшая единица времени в этой программе - минута.

 

Все волшебство данной команды заключено в строках 16-20. Если время, указанное в командной строке, равно текущему времени (строка 16), вычислить и выполнить остальные аргументы командной строки (строка 17), затем выйти с успешным нулевым значением (строка 18). Если время не совпало, немного поспать (строка 19) и повторить все сначала. Символ & в конце цикла в строке 21 превращает весь цикл while в фоновый процесс. Как мы можем убедиться, что shell выполняет все свои команды в фоновом режиме и никакие из них не выполняет в оперативном режиме? В действительности мы не можем этого сделать. Мы должны полагать, что shell так работает. Поскольку многое при программировании на shell делается исходя из опыта и интуиции, вам приходится испытывать многие вещи, чтобы увидеть, как они работают. Периодически shell преподносит сюрпризы и делает нечто совершенно неожиданное.

 

Исследования

 

Что бы случилось, если бы вы поставили задание at в фоновый режим, а затем вышли из системы? Ответ зависит от того, с каким shell вы работаете. Если у вас Bourne shell, то ввод команды control-D при выходе из системы прекращает выполнение всех ваших фоновых задач. Единственный способ оставить в живых фоновые задачи после выхода из системы - использовать команду nohup ("no hang up" - "не казнить").

 

Nohup обеспечивает, что все сигналы о прекращении процесса не достигают данного процесса. Не получая сигнал о прекращении выполнения, процесс думает, что вы все еще находитесь в системе. Синтаксис выглядит так:

 

         nohup at 13:00 echo "back from lunch yet?"

 

Если вы запускаете Си-shell, все фоновые процессы продолжаются после вашего выхода из системы. Причина в том, что Си-shell переводит все свои фоновые задачи в состояние защиты от прекращения выполнения. Этот процесс автоматический, и его не нужно указывать явно.

 

Вы, возможно, удивлены тем, что в строке 17 использована команда "eval $@". Это сформировалось методом проб и ошибок. На начальных этапах разработки at команда "$@" использовалась сама по себе. При самостоятельном применении эта команда означает "выполнить все позиционные параметры". Поскольку это была единственная команда, выполнялась вся строка позиционных параметров, после чего возникали проблемы.

 

Использование переназначений и переменных интерпретатора shell сильно запутывало at.

 

Для иллюстрации рассмотрим пару примеров. Если мы запускаем at с командной строкой

 

          at 09:30 echo $HOME

 

то все вроде бы работает. Сначала раскрывается переменная $HOME, затем echo печатает ее значение - /usr/russ. Но если мы запускаем командную строку

 

          at 09:30 echo \$HOME

 

то переменная не раскрывается и echo фактически печатает $HOME вместо значения переменной $HOME. Мы избежали этого просто с помощью команды eval для повторного вычисления командной строки перед ее выполнением. Существо проблемы в том, что вызывающий интерпретатор shell не раскрывает значение переменной, поэтому мы заставляем выполняющийся shell повторно анализировать командную строку и вычислять все переменные. На этот раз значения переменных раскрываются, и мы получаем верный конечный результат.

 

Модификации

 

Возможно, вы захотите более подробно рассмотреть интерфейс со временем. В нынешнем состоянии at воспринимает только время в пределах от 0 до 23 часов в течение одного дня. Неплохим дополнением было бы заставить его различать время суток, т.е. 8:30 a.m. (до полудня) или 8:30 p.m. (после полудня). Было бы неплохо также иметь возможность сказать "через 10 минут сделать то-то и то-то". В этом случае команда могла бы иметь примерно такой вид:

 

          at -n 10 echo "do in now plus 10 minutes"

 

где -n было бы текущим временем, а 10 добавлялось бы к нему.

 

Другой очевидной областью модификации является наделение at возможностью запоминания периодов времени, превышающих сутки. Это может быть завтрашний день, определенный день или даже определенный месяц. Работа с определенным месяцем может быть не совсем реальной, поскольку командный файл, выполняемый в фоновом режиме в течение нескольких месяцев, потребует громадного количества процессорного времени, а также хранения постоянно возрастающего счетчика идентификаторов процессов, что даст, вероятно, пользователям искаженное представление об активности системы. По достижении максимального номера процесса, снова вернутся младшие номера, так что это не приведет к каким -либо серьезным последствиям. Решение вопроса о том, стоит ли такой ценой достигать вашей цели, зависит от того, считаете ли вы, что ваши требования излишне загружают систему.

 

           Имя: b

b Обработчик фоновых задач

 

Формат вызова

            b any_command_with_options_and_arguments

           (любая команда с опциями и аргументами)

 

Пример вызова

            b cg f.c

Компилировать исходный файл в фоновом режиме, где cg - командная строка компилятора, описанная в главе 10.

 

Текст программы b

    1   :

    2   # @(#) b v1.0    Background task handler  Author: Russ Sage

    2а                   Обработчик фоновых задач

 

    4   ($@; echo "^G\ndone\n${PS1}\c") &

 

Описание

Зачем нам нужен b?

 

Как вы видели в последнем разделе, Bourne shell дает возможность запускать задачи в фоновом режиме выполнения. Это делает символ &. Что же на самом деле происходит, когда мы запускаем что-нибудь в фоновом режиме? Порождается еще один shell, который должен выполнить свою собственную командную строку. После того, как все его команды выполнятся, он завершается. Вы можете определить фоновые задачи по результату работы команды ps. Эти задачи выглядят как интерпретаторы shell, запущенные с вашего терминала, однако их владельцем, или родительским процессом в действительности является команда init, а не ваш регистрационный shell (это справедливо только для shell, к которым применена команда nohup). Интерпретаторы shell, к которым не применялась nohup, принадлежат вашему регистрационному shell. Ниже приводится пример распечатки команды ps для фоновых задач. Командой для выполнения в фоновом режиме была:

 

          while :;do date; done &

 

Команда ps показывает мой регистрационный shell (PID=32), введенную мной командную строку для выполнения в фоновом режиме (PID=419) и shell, который выполняет цикл while (PID=449).

 

    |

    |    UID   PID   PPID  C   STIME  TTY   TIME  COMMAND

    |

    |    root     0      0  0  Dec 31    ?   0:03  swapper

    |    root     1      0  0  Dec 31    ?   0:02  /etc/init

    |    russ    32      1  0 14:18:36  03   1:26  -shV

    |    russ   419     32  0 15:30:31  03   0:02  -shV

    |    russ   449    419  2 15:30:31  03   0:02  -shV

    |

 

Ниже приведен листинг команды ps, который показывает фоновый shell, принадлежащий процессу init. Он был получен командой "b ps -ef", где b - утилита, которая будет рассмотрена далее. Как видите, последний процесс 471 есть фоновый shell, принадлежащий процессу 1, которым является init, а не мой регистрационный shell (PID=32).

   

 |

    |    UID   PID   PPID  C   STIME  TTY   TIME  COMMAND

    |    root     0      0  1  Dec 31    ?   0:04  swapper

    |    root     1      0  0  Dec 31    ?   0:02  /etc/init

    |    russ    32      1  1 14:18:36  03   1:30  -shV

    |    russ   472    471  5 15:46:46  03   0:12  ps -ef

    |    russ   471      1  0 15:46:46  03   0:00  -shV

    |

 

К чему все это приводит? Когда мы используем фоновые задачи, мы должны мириться с "неразборчивостью" при управлении асинхронными процессами. Каковы эти недостатки?

 

Во-первых, мы никогда не знаем момента завершения фоновых задач.

 

Единственный способ определить момент завершения таких задач - проверка результатов в каком-либо файле или некоторой работы, выполненной задачей, или использование команды ps и постоянное слежение за тем, когда процесс завершится. Такое слежение при помощи команды ps - не самый лучший способ, поскольку ps занимает много процессорного времени и очень медленно работает.

 

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

Нам необходимо инструментальное средство, которое сообщает нам о завершении фоновой задачи, а также восстанавливает наш экран после выдачи на него каких-либо результатов. Можем ли мы сказать, выполняла ли вывод на экран фоновая задача или нет? Нет, поэтому мы должны жестко запрограммировать восстановление экрана в программе.

 

Что делает b?

 

Командный файл b - это механизм, который помогает в выполнении фоновых задач. Он запускает наши фоновые задачи. По завершении он отображает на экран слово "done" и затем повторно выводит символ-приглашение shell.

 

Данное средство не имеет опций и проверки на наличие ошибок. Обработчик фоновых задач фактически выполняет командную строку, которую мы ему передаем, и последующую обработку. Отметим, что для выдачи на экран вашего символа приглашения, вы должны экспортировать переменную PS1 из вашей текущей среды. Это может соблюдаться не на всех машинах, поскольку каждая система UNIX имеет свои особенности. В системе XENIX переменная PS1 не передается, возможно из-за того, что это shell, который вызывает другой shell в фоновом режиме. Если вы скажете "sh" в интерактивном режиме, он будет передан как приглашение. Система UNIX так прекрасна и удивительна!

 

Примеры

 

            1.  $ b ls -R ..

Начиная с родительского каталога, рекурсивно составляется список всех файлов и выводится на экран. Обратите внимание, что при использовании фоновых задач вы не можете эффективно передать все это по конвейеру команде more, поскольку обычным входным устройством для фоновых задач является /dev/null. Команда more не работает нормально, когда ее вызывают из фонового режима. Это также имеет смысл, поскольку вы могли бы иметь две задачи - одну в фоновом режиме, а другую в приоритетном производящие беспорядок на экране. Фоновая команда more должна была бы сохранять в неприкосновенности то, что выводит на экран приоритетная команда.

 

            2.  $ b echo hello > z

Файл z содержит не только слово "hello", но также и сообщение "done", поскольку переадресация в файл z выполняется во внешнем shell. Переадресация для подзадачи должна быть выполнена в круглых скобках программы b, а мы в данном случае не можем этого сделать.

 

            3.  $ b sleep 5; echo hello

Эта командная строка не может быть выполнена, поскольку программа b воспринимает только команду sleep. Команда echo не помещается в фоновый процесс и сразу же выполняется.

 

            4.  $ b "sleep 5; echo hello"

Эту командную строку мы тоже не можем выполнить, поскольку эти две команды будут восприняты командным файлом b как одна. Затем команда sleep не выполнится, поскольку "5; echo hello" является недопустимым указанием временного периода для команды sleep.

 

Пояснения

 

Обратите внимание, что в строке 4 вся структура команды заключена в круглые скобки, за которыми следует символ &. Круглые скобки передают всю структуру подчиненному shell, который затем помещается в фоновый режим выполнения. Помещая все команды в один shell, мы гарантируем вывод на экран слова "done" после завершения последнего процесса.

 

Данная командная строка выполняется с помощью символов $@. Это означает: "выполнить всю командную строку, расположенную справа". Поскольку выражение $@ выполняет само себя (т.е. не в операторе echo или в чем-либо подобном), то shell просто выполняет команды исходной командной строки. Это именно то, что мы хотим! Обратите внимание, что здесь нет никакого оператора eval. Поскольку то, что мы делаем, похоже на своего рода "командный интерпретатор строк" для их ввода и исполнения, вы могли бы подумать, что команда eval здесь необходима. По опыту мы знаем, что это не так. Похоже, что применение eval усложнит дело.

 

Даже наш старый тест, использующий переменные среды выполнения, работает. По команде

 

             b echo $HOME

 

на экран будет выдано сообщение

 

            /usr/russ

 

Когда вся команда выполнится, подается звуковой сигнал и выводится сообщение, информирующее пользователя о том, что операция завершилась. Поскольку это сообщение накладывается на то, что было на экране, то переотображается начальный символ приглашения (PS1). Это делает нормальным вид экрана в том смысле, что символ приглашения shell сообщает об ожидании ввода.

 

   
 
 
Картинная галерея
Галерея eLinux : Последние добавления : Последние добавления : Часто просматриваемые : Поиск по галерее
Linux введение : Обучение Linux : Установка Linux : Взаимодействие в сети : Команды Linux : Архитектура Linux : Работа с Linux
Секреты работы : Временные операции : Переферия
 
 

 

 
   
 
 

385 руб.

Антивирус Dr.Web Mail Gateway

Dr.Web Mail Gateway – комплексное модульное решение для обработки и фильтрации входящего и исходящего трафика на серверах под управлением Unix (Linux/FreeBSD/Solaris(x86). 

Список версий:

Антивирус Dr.Web Mail Gateway


570 руб.

FastScript

FastScript —библиотека для выполнения скриптов. Она будет полезна разработчикам, желающим добавить возможности исполнения скриптовых программ в свои проекты. FastScript написан полностью на 100% Object Pascal и может быть установлен в Borland Delphi 4-2007, Borland C++Builder 4-6, Borland Kylix 1-3 и Lazarus. 

Список версий:

FastScript


Полный каталог

 
 

 

 
   
 
   
 

 

 

 

 

Все права защищены.

Копирование запрещено.

Rambler's Top100

Дизайн:

ССтудия Onta.ru