- •Міністерство освіти і науки України
- •Жуковецька с.Л., Шестопалов с.В.
- •Анотація
- •Введення
- •Лабораторна робота №1 Технологія розробки програм у середовищі Linux
- •1. Команди роботи з командним інтерпретатором ос unix
- •2. Створення програми
- •3. Функції введення-виведення.
- •4. Приклад програми
- •5. Основні керуючі конструкції мови с
- •6. Індівідуальні завдання
- •Лабораторна робота № 2. Автоматизація пакетних завдань
- •1. Компіляція багатомодульною програми
- •2. Автоматизація пакетних завдань
- •4. Завдання
- •Лабораторна робота № 3. Взаємодія програми з середовищем виконання
- •1. Аргументи командного рядка
- •2. Змінні оточення
- •3. Індівідуальні завдання
- •Лабораторна робота №4. Контроль виконання програми
- •1. Коди завершення програми
- •2. Функції обробки значення errno
- •3. Функція atexit()
- •4. Макрос asssert()
- •5. Індівідуальні завдання
- •Лабораторна робота №5 Файлові api.
- •1 Основні поняття
- •2. Права доступу до файлів
- •3. Інтерфейси для файлового введення / виводу
- •4. Системні виклики роботи з файлами
- •5. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №6 Робота з каталогами та посиланнями
- •Методичні вказівки
- •1. Створення та видалення каталогу
- •2. Читання каталогу
- •3. Зміна каталогу
- •4. Управління жорсткими посиланнями
- •5. Управління символічними посиланнями
- •6. Перейменування файлів і каталогів
- •7. Індівідуальні завдання
- •Лабораторна робота №7. Одержання і відображення метаданих файлу.
- •Методичні вказівки
- •1. Механізми управління файлами ос unix
- •2. Отримання даних індексного дескриптору
- •3. Додаткові функції маніпулювання даними індексних дескрипторів
- •4. Отримання даних про відкриті файли
- •5. Індівідуальні завдання
- •Лабораторна робота №8. Керування процесами
- •Методичні вказівки
- •1. Загальні поняття
- •2. Створення поцесу
- •4. Перезавантаження програми процесу
- •5. Завершення виконання процесу
- •6. Системні виклики wait, waitpid
- •7. Індівідуальні завдання
- •Лабораторна робота №9. Використання каналів
- •Методичні вказівки
- •1. Заганьні відомості
- •2. Використання каналів
- •3. Індівідуальні завдання
- •Варіанти завдань
- •Лабораторна робота №10 Використання повідомлень
- •Методичні вказівки
- •1. Загальні відомості
- •2. Використання повідомлень
- •3. Індівідуальні завдання
- •Література
- •Системне програмування Посібник до виконання лабораторних та самостійних робіт
- •65082, Одеса, вул. Дворянська, 1/3
5. Індівідуальні завдання
Написати програму, яка виводить дату і час останньої зміни файлу. Ім'я файлу задавати у вигляді аргументу командного рядка. Перевіряти, чи не виникають помилки при системних викликах.
Написати функцію, що додає право на читання файлу всім категоріям користувачів. Аргументом є колійне ім'я файлу. Функція повертає значення 0, якщо операція вдалася, і -1 в іншому випадку
Написати функцію, що визначає власника файлу. Аргументом функції є колійне ім'я файлу. Функція повертає ідентифікатор власника, у випадку успіху і -1 в іншому випадку.
Написати програму, що додає право читання файлу всім категоріям користувачів для декількох файлів. Імена файлів задавати у вигляді аргументів командного рядка. Перевіряти, чи не виникають помилки при системних викликах.
Написати функцію, що визначає, чи є право читати користувачеві заданий файл? Аргументом є колійне ім'я файлу. Функция возвращает значение 0, если такое право есть, и -1 в противном случае.
Написать функцию, определяющую, установлен ли бит смены идентификатора пользователя (S_ISUID) ? Аргументом является путевое имя файла. Функция возвращает значение 0, если это так, и -1 в противном случае.
Написать функцию, определяющую, является ли заданный файл символической ссылкой? Аргументом является путевое имя файла. Функция возвращает значение 0, если является, и -1 в противном случае.
Написать функцию, возвращающую длину файла. Аргументом функции является файловый дескриптор.
Открыть файл, указанный в командной строке, и выдать на экран параметры доступа к открытому файлу. Написать функцию, принимающую на входе файловый дескриптор и снимающую флаг, дающий право на запись в соответствующий файл, если он установлен. Проверить действие этого флага до и после снятия, вывести отчет на экран.
Определить, будет ли создаваться файл, указанный в командной строке, при программном обращении к нему. Вывести результат проверки на экран.
Написать функцию, принимающую на входе файловый дескриптор и определяющую, как при записи будут помещаться данные в соответствующий файл: в конец либо в начало. Выдать результаты проверки на экран.
Написать функцию, принимающую на входе файловый дескриптор и снимающую флаг O_NONBLOCK для соответствующего файла. Проверить действие этого флага до и после снятия, вывести результаты проверки на экран.
Лабораторна робота №8. Керування процесами
Мета: Оволодіння технологією використання API для роботи із процесами ОС UNIX. Застосування отриманих знань для написання програм керування процесами.
Завдання для самостійної підготовки:
Вивчити:
організацію процесів ОС UNIX;
основні атрибути процесів ОС UNIX;
засоби міжпроцесної взаємодії;
системні виклики керування процесами ОС UNIX;
Методичні вказівки
1. Загальні поняття
Процес - це фундаментальне поняття ОС Unix. Під процесом розуміється програма під час її виконання. Процес є єдиною активною сутністю в системі Unix. Процес - унікальним образом идентифицируемая програма, що має потребу в одержанні доступу до ресурсів комп'ютера.
Процес в UNIX має ряд атрибутів, що дозволяють операційній системі управляти його роботою. Основні атрибути:
Ідентифікатор процесу (PID).
Ідентифікатор батьківського процесу (PPID).
Поточний пріоритет PRI.
Виправлення пріоритету (NICE) - відносний пріоритет.
Термінальна лінія (TTY).
Реальний (UID) і ефективний (EUID) ідентифікатори користувача.
Реальний (GID) і ефективний (EGID) ідентифікатори групи.
Unix надає ряд системних викликів, за допомогою яких можна довідатися реальні й діючі ідентифікатори користувача й групи:
getuid - повертає реальний ідентифікатор користувача
#include <unistd.h>
uid_t getuid(void);
Повертає ідентифікатор користувача (коди помилок не передбачені)
#include <unistd.h>
uid_t geteuid(void);
Повертає ідентифікатор користувача (коди помилок не передбачені
getgid - повертає реальний ідентифікатор групи
#include <unistd.h>
gid_t getgid(void);
Повертає ідентифікатор групи (коди помилок не передбачені)
getegid - повертає діючий ідентифікатор групи
#include <unistd.h>
gid_t getegid(void);
Повертає ідентифікатор групи (коди помилок не передбачені)