Системні виклики UNIX

Дана глава присвячена самому нижньому рівню взаємодії з операційною системою UNIX – системним викликам, які служать точками входу в ядро Саме ці можливості надає власне операційна система все інше будується на цій основі

Розглянемо кілька основних тем Насамперед, систему введення виведення, що лежить в основі таких бібліотечних функцій, як fopen і putc Також ми продовжимо обговорення файлової системи, зокрема каталогів та індексних дескрипторів (inode) Потім обговоримо процеси – способи запуску програм з інших програм Після цього поговоримо про сигнали і переривання: що відбувається при натисканні клавіші DELETE і як правильно обробити це в програмі

Як і в розділі 6, багато приклади являють собою корисні програми, що не увійшли до сьому Верії Навіть якщо ви не будете використовувати саме ці програми, знайомство з ними може підказати вам ідеї для своїх власних проектів

Системні виклики детально розглянуті в man2, а в цій главі будуть розглянуті найбільш важливі моменти (без претензії на повноту викладу)

Низькорівневий введення-виведення

Самий нижній рівень введення-виведення безпосередньо взаємодіє з операційною системою Програма читає і пише файли фрагментами довільного розміру Ядро буферизует дані в блоках, раз заходів яких визначається периферійним пристроєм, і встановлює черговість роботи пристроїв, оптимізуючи продуктивність для всіх користувачів

Дескриптори файлів

Весь введення і виведення виконується як читання і запис файлів, оскільки всі периферійні пристрої, включаючи і термінал, представлені в файлової системі файлами Це означає, що єдиний інтерфейс управляє всім взаємодією між програмою і периферійними пристроями

У самому загальному випадку перед тим як читати або писати файл, не обхідно повідомити системі про свій намір цей процес називається відкриттям файлу Якщо ви збираєтеся записувати у файл, можливо, його треба попередньо створити Система перевіряє права користувача на виконання операції (чи існує файл Чи є дозвіл на доступ до нього) І, якщо все в порядку, повертає невідємне ціле число, яке і називається дескриптором файлу Всякий раз, коли виконується файловий ввід-висновок, дескриптор використовується замість імені для ідентифікації файлу Вся інформація про відкритий файлі підтримується системою, а програма звертається до нього тільки по дескриптору Покажчик типу FILE, як розповідалося в главі 6, вказує на структуру, яка крім іншого містить дескриптор файлу, а макрос fileno (fp), визначений у

, повертає цей дескриптор

Існують спеціальні угоди, що дозволяють зробити термінальний введення-виведення зручнішим Програма, будучи запущена оболонкою, отримує від неї три відкритих файлу з дескрипторами 0, 1 і 2, які називаються стандартним вводом, стандартним висновком і стандартним висновком помилок Всі вони за замовчуванням повязані з терміналом, так що якщо програма обмежується читанням файлу з дескриптором 0 і записом у файли з дескрипторами 1 і 2, їй не потрібно відкривати файли для введення-виведення Якщо ж програма відкриває інші файли, то вони отримають дескриптори 3, 4 і т д

Якщо використовується перенаправлення вводу-виводу, то оболонка вимірюв няет встановлене за замовчуванням відповідність для дескрипторів 0 і 1 з терміналу на зазначені файли Зазвичай файловий дескриптор 2 залишається повязаним з терміналом, щоб на нього могли виводитися повідомлення про помилки Такі команди, як 2>імя5файлаі 2> & 1, викличуть перевизначення замовчувань, причому перепризначення файлів виконується оболонкою, а не програмою (При бажанні програма може сама здійснити перепризначення, але це зустрічається рідко)

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*