[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Упражнения

Эти упражнения позволят вам попрактиковаться в работе со средой
исполнения процесса.
Если тексты программ доступны вам, можно скопировать в вашу рабочую
директорию любую программу, подходящую для упражнения, которое вы
решаете. В ней можно удалить ненужные строки и вставить необходимые.
Скорее всего у вас не будет достаточно времени, чтобы решить все
упражнения. Просто сохраните ваши решения. Позже вы, возможно,
захотите разработать их более тщательно.
Вывод различных атрибутов процесса, в соответствии с указанными
опциями.
Напишите программу, которая будет обрабатывать опции, приведенные
ниже. Опции должны быть обработаны в соответствии с порядком своего
появления справа налево. Разрешено одной и той же опции появляться
несколько раз. Используйте getopt(3C) для определения доступных опций.
Сначала пусть ваша программа обрабатывает только  несколько опций.
Затем добавьте еще, до тех пор пока все опции не будут обрабатываться.
Вы можете скопировать  программу getopt_ex.c, расположенную в
директории unit2, и изменить ее. Эта программа была приведена на
странице 2-15.
-i        Печатает реальные  и эффективные идентификаторы пользователя
          и группы.
-s        Процесс  становится   лидером  группы.   Подсказка:   Смотри
          setpgid(2).
-p        Печатает  идентификаторы  процесса,  процесс  -  родителя  и
          группы.
-u        Печатает значение ulimit.

-Uновое_ulimit Изменяет значение ulimit. Подсказка: Смотри atol(3C) на
          странице Руководства STRTOL(3C).

-c        Печатает в  байтах размер  core-файла,  который  может  быть
          создан.

-Cразмер  Изменяет размер core-файла.

-d        Печатает текущую рабочую директорию.

-v        Печатает shell-переменные и их значения.

-Vимя=значение Вносит переменную  и значение   в  среду  или  изменяет
          значение существующей shell-переменной.

Проверьте вашу программу на различных списках аргументов, в том числе
включающем:
  а. Нет аргументов.

  б. Недоступную опцию.

  в. Опции, разделенные знаком минус.

  г. Неудачное значение для U.
Время в Калифорнии

Скопируйте программу ex_time.c из директории unit01. Эта программа
была приведена на странице 1-25. Измените программу, чтобы на она
выводила дату и время в Калифорнии. Подсказка: Если UTC время 20
часов, то в Калифорнии - 12 часов.
Замечание: Если вы живете в Калифорнии, выведите время в Нью-Джерси
(на 5 часов раньше UTC).
Установка идентификатора пользователя для доступа к файлу
Создайте файл данных, в который может писать и читать только владелец
и напишите программу, которая:
 а. Печатает реальный и эффективный идентификатор пользователя.

 б. Открывает  файл  с  помощью  fopen(3).  Если  fopen()  завершается
    успешно, файл  должен быть  закрыт с помощью fclose(). Напечатайте
    сообщение об  ошибке, используя  perror(3C), если  файл не удалось
    открыть.

 в. Убедитесь, что  реальный и эффективный идентификаторы пользователя
    совпадают. Подсказка: setuid(2).

 г. Повторите шаги а и б

Проверьте работу вашей программы:
 1. Исполните программу и просмотрите вывод.

 2. Сделайте программу  доступной для  запуска членам  вашей группы, и
    пусть ваши одногруппники исполнят  программу.

 3. Установите бит  установки идентификатора пользователя и пусть ваши
    одногруппники  опять исполнят эту программу.