Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OS_metod

.pdf
Скачиваний:
10
Добавлен:
07.02.2016
Размер:
480.05 Кб
Скачать

51

#include <fcntl.h> #include <sys/stat.h> #include <stdio.h> #define BUFFER_SIZE 64 int main()

{

char buffer[BUFFER_SIZE]; int in_fd;

// Відкрити вхідний та вихідний файли in_fd = open("lab05.data", O_RDONLY); dup2(in_fd, STDIN_FILENO);

/* Цикл доки не EOF, копіювати BUFFER_SIZE байт за один раз */

while(gets(buffer))

printf("%s\n",buffer); close(in_fd);

exit(0);

}

5.2.2.2Дайте відповіді на питання:

що є результатом виконання програми?

яке призначення функції dup(2)? Поясніть.

5.2.2.3 Модифікуйте програму L5_redirect.c так, щоб стандартний вивід було перенаправлено до файлу, який вводиться з командного рядка. Продемонструйте програму викладачу. Запишіть до звіту фрагмент модифікованої програми.

5.2.3 Використання каналів. Системний виклик pipe(2).

5.2.3.1Ознайомтесь з програмою L5_pipe.c:

// Програма L5_pipe.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define MAX 64

int main()

{

int fd[2], pid;

52

pipe(fd); pid = fork(); if (pid > 0)

{

//Батьківський процес: закриває кінець

//"read" каналу, виводить повідомлення,

//записує повідомлення в канал

char msg[] = "Hello, world!"; printf("ID: %ld Start\n", getpid()); close(fd[0]);

printf("ID: %ld Message: %s\n",getpid(),msg); write(fd[1], msg, strlen(msg)+1); close(fd[1]);

printf("ID: %ld Finish\n", getpid()); exit(0);

}

else

{// Дочірній процес: закриває кінець "write"

//каналу, читає повідомлення з каналу,

//виводить його на екран

int nbytes; char buf[MAX];

printf("ID: %ld Start\n", getpid()); close(fd[1]);

for (;;)

{

nbytes = read(fd[0], buf, MAX); if (nbytes == 0) break;

printf("ID: %ldМessage:%s\n",getpid(),buf);

}

close(fd[0]);

printf("ID: %ld Finish\n",getpid()); exit(0);

}

}

5.2.3.2 Відкомпілюйте та виконайте програму. Дайте відповіді на питання:

що є результатом виконання програми?

виконайте програму декілька разів. Чи є однаковим при всіх запусках порядок, в якому з’являється вивід на екран? Поясніть;

як дочірній процес визначає "кінець файлу"?

53

5.2.3.3 Модифікуйте батьківський процес, щоб він призупинявся на 2 секунди (за допомогою функції sleep) після запису в канал, але перед закриттям кінця write каналу. Як ця модифікація впливає на результат виводу? Поясніть.

5.2.3.4 Що відбудеться, якщо батьківський процес ніколи не закриє кінець write каналу? Поясніть.

5.3 Контрольні питання

5.3.1Для чого потрібні системні виклики open(2), close(2)?

5.3.2Як працюють системні виклики read(2), write(2)?

5.3.3Опишіть використання системних викликів dup(2), dup2(2).

5.3.4Що таке канал?

5.3.5Як створити канал? Які існують обмеження на створення каналів?

5.4 Зміст звіту

5.4.1Тема та мета роботи.

5.4.2Відповіді на питання пп. 1.2 та 1.4 лабораторного завдання.

5.4.3Фрагмент модифікованої програми у відповідності до пп. 1.5 лабораторного завдання.

5.4.4Відповіді на питання пп. 2.2 лабораторного завдання.

5.4.5Фрагмент модифікованої програми у відповідності до пп. 2.3 лабораторного завдання.

5.4.6Відповіді на питання пп. 3.2 та 3.4 лабораторного завдання.

5.4.7Результати виводу програми післе її модифікації згідно з пп. 3.3 лабораторного завдання.

5.4.8Відповіді на контрольні запитання.

54

ЛІТЕРАТУРА

1Робачевский А.М. Операционная система UNIX. – СПб.: БХВ – Санкт-Петербург, 2003. – 528 с.

2Митчел Марк, Оулдем Джеффри, Самьюэл Алекс. Программирование для Linux. Профессиональный подход.: Пер. с англ. – М.: Издательский дом "Вильямс", 2002. – 288 с.

3Интернет-ресурсы по операционным системам. http://WilliamStallings.com/OS4e.html

4Интернет-ресурсы по операционным системам, операционным системам реального времени. http://www.onesmartclick.com/RTOS

5Керниган Б.В., Пайк Р. UNIX – универсальная среда программирования.: Пер. с англ. – М.: Финансы и статистика, 1992. – 304 с.

6Костромин В. Самоучитель Linux для пользователя. – СПб.: БХВ

– Петербург, 2003. – 672 с. http://rus-linux.net/book1.php?name= book1/oglavl

7Mendel Cooper. Advanced Bash-Scripting Guide.

http://www.tldp.org/LDP/abs/html Пер. с англ.: Киселев А.

Искусство программирования на языке сценариев командной оболочки. http://gazette.linux.ru.net/rus/articles/index-abs-guide.html

8Bash Reference Manual. http://www.gnu.org/software/bash/manual/bashref.html

9Баурн С. Операционная система UNIX: Пер. с англ.– М.: Мир, 1986. – 463 c.

10Вильям Столлингс. Операционные системы, 4-е издание. : Пер.с англ. – М.: Издательский дом "Вильямс", 2002. – 848 с.

 

 

55

 

 

 

Додаток А

 

 

Внутрішні функції shell

 

 

 

:

пуста команда. Код поверення завжди 0 (успіх).

 

 

Зручна для створення нескінченних циклів;

 

 

break [n]

здійснює вихід з циклу for або while. Якщо

 

 

параметр n вказаний, відбувається вихід з n

 

 

вкладених циклів;

 

 

 

 

cd [dir]

здійснює перехід до каталогу dir. Якщо

 

 

параметр не заданий, відбувається перехід до

 

 

домашнього каталогу ($HOME);

 

 

 

 

echo [st]

рядок st виводиться до

стандартного

 

 

пристрою виводу (термінал);

 

 

 

exit [n]

завершує роботу поточного інтерпретатора (або

 

 

скрипту) з кодом повернення n. За замовчанням

 

 

код повернення дорівнює 0;

 

 

 

 

export

розміщує змінні, що вказані як

аргументи, в

[name 1,

 

середовищі поточного shell, після цього вони є

name 2]

 

доступними для програм, що запускаються з

 

 

інтерпретатору;

 

kill [-sig]

відправити сигнал, що визначається пара-

pid1 pid2 …

 

метром sig, процесам, які задаються парамет-

 

 

рами pid. За замовчанням команда kill

 

 

відправляє сигнал з номером 15 – SIGTERM,

 

 

для якого дія за замовчанням – завершення

 

 

виконання процесу, який отримує сигнал;

 

 

 

pwd

виводить ім’я поточного каталогу;

 

 

 

read v1 v2 …

порядково зчитує слова (групи символів, розді-

 

 

лені пробілами) зі стандартного потоку вводу,

 

 

послідовно привласнюючи змінним v, що

 

 

задані як параметри, значення, які дорівнюють

 

 

словам. Якщо число слов в рядку перевищує

 

 

число змінних, тоді останній змінній привлас-

 

 

нюється значення, що дорівнює залишку рядка;

 

 

 

 

 

 

 

56

 

 

 

 

return [n]

здійснює вихід з функції з кодом повернення n.

 

 

За замовчанням повертається код останньої

 

 

команди;

 

 

 

 

 

 

set

без параметрів виводить список визначених

 

 

змінних;

 

 

 

 

 

shift [n]

здійснює зсування позиційних параметрів, що

 

 

зберігаються в $1, $2 і т.д. на n позицій. За

 

 

замовчанням зсування здійснюється на одну

 

 

позицію.

 

 

 

 

 

test

обчислює умовний вираз. Повертає 0 – істина,

 

 

або 1 – неістина;

 

 

 

 

trap command

визначає команду command, яку буде виконано

sig1 sig2 …

 

при надходженні сигналів, вказаних як

 

 

аргументи sig;

 

 

 

 

 

ulimit

виводить або встановлює значення меж, що

 

 

обмежують використання завданням системних

 

 

ресурсів (часу процесора, пам’яті, дискового

 

 

простору);

 

 

 

 

 

umask nnn

встановлює маску прав доступу для знову

 

 

створюваних файлів як nnn;

 

 

 

 

 

 

unset v1 v2 …

вилучає

змінні, що

вказані як

аргументи, зі

 

 

списку

визначених

змінних

командного

 

 

інтерпретатора. Деякі змінні, наприклад, PATH,

 

 

PS1, PS2, не можуть бути вилучені.

 

 

 

wait pid

чекає на завершення виконання процесу з

 

 

ідентифікатором pid та повертає його код

 

 

повернення.

 

 

 

 

 

 

 

 

57

Додаток Б

Часто використовувані утіліти UNIX

Поле [opt] містить конкретні опції кожної утіліти. Больш детально синтаксис команд див. в електронному довіднику man в розділі 1.

cmp [opt]

порівнює два файли, вказаних як

file1 file2

 

аргументи. Якщо файли однакові, ніяке

 

 

повідомлення не виводиться. В протилеж-

 

 

ному випадку виводяться дані про першу

 

 

невідповідність між цими файлами;

сp [opt]

слугує для копіювання файлів;

file1 file2

 

 

сp [opt]

слугує для копіювання файлів до каталогу;

file1 … dir

 

 

mv [opt]

змінює ім’я файлу;

file1 file2

 

 

mv [opt]

переміщення вказаних файлів до каталогу;

file1 … dir

 

 

rm [opt]

вилучення файлів та каталогів;

file1…

 

 

rmdir dir1…

видалення пустих каталогів;

ls [opt]

без параметрів утіліта ls виводить список

[file1 file2 …]

 

файлів та каталогів поточного каталогу в

 

 

алфавітному порядку. Як параметри можна

 

 

задати імена каталогів, зміст яких

 

 

необхідно вивести, або імена файлів,

 

 

інформацію про які треба отримати. Опції

 

 

утіліти дозволяють отримати список різної

 

 

інформативності та формату. Найбільш

 

 

поширені з них:

 

 

–a – вивід як і без опцій, але виводить й

 

 

файли, що починаються з '.';

 

 

–l – виводить тип файлу, права доступу до

58

 

 

файлу, кількість посилань на файл, ім’я

 

 

власника, ім’я групи, розмір файлу в

 

 

байтах, часовий штамп та ім’я файлу. За

 

 

замовчанням часовий штамп є часом

 

 

останньої модифікації;

 

 

–u – використовувати при сортуванні час

 

 

останнього доступу до файлу замість часу

 

 

останньої модифікації;

 

 

–F – для кожного імені каталогу додавати

 

 

суфікс '/', для кожного імені виконуємого

 

 

файлу '*';

 

 

–R – включити рекурсивну видачу списку

 

 

каталогів;

mkdir [-m mode]

створити каталог;

[-p] dir1…

 

 

fgrep [opt]

утіліта пошуку фрагментів тексту в фай-

<підрядок>

 

лах. Може використовуватись як фільтри в

file1…

 

програмних каналах. Застосовується для

 

 

пошуку підрядка в файлах. Якщо підрядок

 

 

пошуку містить пробіли або знаки табуля-

 

 

ції, її потрібно вмістити в лапки. Якщо

 

 

підрядок вже містить лапки, перед ними

 

 

слід помістити символ '\' безпосередньо

 

 

перед лапками. Якщо необхідно зробити

 

 

пошук чутливим до великих/рядкових

 

 

символів, використовуйте ключ –y. Для

 

 

пошуку рядків, які не містять вказаний

 

 

підрядок, використовується ключ –v;

grep[opt]

утіліта пошуку фрагментів тексту у

<рег.вираз>

 

файлах. Може використовуватись як

file1…

 

фільтри в програмних каналах. Дозволяє

 

 

здійснювати більш складний пошук,

 

 

наприклад, коли Ви не впевнені в написан-

 

 

ні слова пошуку, або бажаєте знайти слова,

 

 

розташовані у визначених місцях файлу. В

 

 

цьому випадку як підрядок вказується

 

 

регулярний вираз <рег.вираз>;

 

 

59

 

 

 

 

 

 

 

 

 

сat [opt] file

сat file виводить зміст файлу file на

 

 

екран. Якщо файл не текстовий, тобто

 

 

містить "недруковані" символи, краще

 

 

задати команду з ключом –v для

 

 

подавлення виводу таких символів;

 

 

more [opt] file

дозволяє виводити файл порціями на екран

 

 

(зручно використовувати у випадку

 

 

великих файлів);

 

 

 

 

 

head [-n] file

дозволяє

продивитись

 

тільки

початок

 

 

(перші n рядків) файлу;

 

 

 

 

tail [opt] file

дозволяє

продивитись

тільки

 

кінець

 

 

(останні n рядків) файла;

 

 

 

less

дозволяє виводити файл порціями на екран

 

 

(інтерфейс як в команді man);

 

 

sort

використовується

для

сортування

рядків

 

 

файла. Наприклад, для сортування тексту в

 

 

алфавітному порядку

необхідно

 

ввести

 

 

команду:

 

 

 

 

 

 

 

 

$ sort –d file >sorted_file

 

 

Можна вказати номер слова рядка, за яким

 

 

необхідно здійснити сортування (точніше,

 

 

номер поля запису, за замовчанням запи-

 

 

сом є рядок, а поля розділені пробілами);

cut

дозволяє

відфільтрувати

вказані

поля

 

 

рядків файла. Роздільник полів вказується

 

 

опцією -d<sep>;

 

 

 

 

 

wc file

дозволяє вивести число рядків, слов та

 

 

символів тексту файла;

 

 

 

 

find dir [opt]

виконує пошук файла в файловій системі

 

 

UNIX, починаючи з каталогу dir. За

 

 

допомогою опції –name вказується ім’я

 

 

файла пошуку, а за допомогою –print

 

 

дія (вивести повне ім’я). Можна

 

 

здійснювати пошук файлів за другими

 

 

критеріями,

наприклад,

розміру,

 

 

останньому часу модифікації і т.д.;

 

 

60

chown user

змінює

власника-користувача

вказаних

file…

 

файлів;

 

 

 

chgrp group

змінює власника-групу вказаних файлів;

file…

 

 

 

 

 

chmod mode

змінює

права доступу

та

додаткові

file…

 

атрибути файлів;

 

 

Date

виводить поточну дату;

 

 

cal [-mjy13]

виводить

календар.

Якщо

немає

[[month] year]

 

аргументів, то виводиться тільки поточний

 

 

місяць. Використовуються такі опції:

 

 

–m – виводить понеділок як перший день

 

 

тижня;

 

 

 

 

 

–y – виводить календар поточного року;

 

 

–j – виводить номера днів, відраховуючи

 

 

їх з 1-го січня;

 

 

 

 

–3 – виводить 3 місяця: попередній /

 

 

поточний / наступний.

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]