Системне програмування в UNIX засобами Free Pascal (исходники, електронна книга), Unix, Операційні системи, статті

Про книгу

В основу даної книги покладено друге видання керівництва програміста UNIX System Programming: A programmer’s guide to software development by Keith Haviland, Dina Gray, Ben Salama. Дуже вдале по структурі і підбору прикладів, це керівництво є одним з кращих підручників з системного програмування в UNIX, тому з самого початку ми вважали доречним зберегти їх, виправивши і доповнивши в Відповідно до нових можливостями Linux / BSD і компілятора Free Pascal.
На першому етапі нашої роботи було створено модуль stdio, необхідний для сумісності зі стандартною бібліотекою мови Сі. В модуль увійшли безліч структур даних, процедур і функцій, що не входять в бібліотечні модулі Free Pascal, але істотно полегшують життя програміста.
На другому етапі приклади з книги Кейт Хевіленд, Дани Грей і Бена Салам були переведені з Сі на Паскаль. Це зажадало модифікації значної частини тексту книги, присвяченої опису використовуваних бібліотечних функцій і системних викликів.
Нарешті, книга була доповнена описом структур даних, процедур і функцій бібліотечних модулів linux, ipc і sockets, специфічних для ОС Linux / BSD.
В результаті проведеної роботи була отримана дана книга, в якій збереглося частина вихідного тексту з книги Кейт Хевіленд, Дани Грей і Бена Салам. Зрозуміло, при необхідності ці фрагменти можуть бути замінені на інші, але результатом цього буде всього лише виклад відомої довідкової інформації іншими словами.

Призначення цієї книги

З часу своєї появи в Bell Laboratories в 1969 р. операційна система UNIX ставала все більш популярною, спочатку отримавши визнання в академічному світі, а потім вже в якості стандартної операційної системи для нового покоління багатокористувацьких мікро-і мінікомп’ютерів в 80-х роках. І це зростання, мабуть, продовжується в момент написання даної книги.
Операційна система UNIX виправдала покладалися на неї надії і тепер є ключовою деталлю технологічного пейзажу на рубежі XXI століття. Не кажучи вже про те, що UNIX завжди займала сильні позиції в науковому та технічному спільнотах, в даний час існує безліч великомасштабних систем управління даними і обробки транзакцій на платформі UNIX. Але, найголовніше, ОС UNIX, безумовно, є ядром серверів магістральної мережі Internet.
Основна увага в книзі приділяється програмного інтерфейсу між ядром UNIX (частиною UNIX, яка робить її операційною системою) і прикладним програмним забезпеченням, яке виконується в середовищі UNIX. Цей інтерфейс часто називається інтерфейсом системних викликів UNIX (хоча різниця між такими викликами і звичайними бібліотечними процедурами тепер вже не настільки очевидна, як це було раніше). В подальшому ми побачимо, що системні виклики – це примітиви, на яких в кінцевому рахунку побудовані всі програми UNIX – і поставляються разом з операційною системою, і розробляються незалежно. Цільова аудиторія книги складається з програмістів, уже знайомих з UNIX, які збираються розробляти програмне забезпечення для ОС UNIX на мові Pascal. Ця книга в рівній мірі підійде розробникам системного програмного забезпечення і прикладних або ділових додатків – фактично всім, хто серйозно цікавиться розробкою програм для ОС UNIX.
Крім системних викликів ми також розглянемо деякі з найбільш важливих бібліотек підпрограм, які поставляються з системою UNIX. Ці бібліотеки, звичайно ж, написані з використанням системних викликів і в багатьох випадках роблять те ж саме, але на більш високому рівні, або більш зручні для використання програмістами. Сподіваємося, що при дослідженні як системних викликів, так і бібліотеки підпрограм ви отримаєте уявлення про те, коли можна користуватися існуючими досягненнями, не «винаходячи велосипед», а також краще зрозумієте внутрішній устрій цієї все ще прекрасної операційної системи.

Специфікація Х / Open

ОС UNIX має довгу історію, і існувало безліч її офіційних і фактичних стандартів, а також комерційних і навчальних варіантів. Проте ядро ​​системи UNIX, що знаходиться в центрі уваги в даній книзі, залишається надзвичайно стабільним.
Ми поклали в основу тексту і прикладів документи (всі датовані 1994 роком) System Interface Definitions (Опис системного інтерфейсу) і System Interfaces and Headers (Системні інтерфейси та заголовки) з 4-ї версії другого випуску Х / Open, а також частина пов’язаного з ними документа Networking Services (Мережеві сервіси). Для зручності ми будемо застосовувати скорочення XSI – від Х / Open System Interfaces (Системні інтерфейси Х / Open). При необхідності особливості різних реалізації системи будуть обговорюватися окремо.
Тут потрібно зробити невеличкий відступ. Консорціум Х / Open спочатку об’єднав виробників апаратного забезпечення, серйозно зацікавлених у відкритих операційних системах і платформі UNIX, але з часом число його членів зросла. Одна з головних задач консорціуму складалася 3 у виробленні практичного стандарту UNIX, і керівництво по забезпеченню мобільності програм, зване XPG, послужило базовим документом для проекту декількох основних виробників (включаючи Sun, IBM, Hewlett Packard, Novell і Open Software Foundation), зазвичай званого Spec 1170 Initiative (1170 – це число охоплених цим документом викликів, заголовків, команд і утиліт). Метою цього проекту було створення єдиної уніфікованої специфікації системних сервісів UNIX, включаючи системні виклики, які є основою цього документа. В результаті вийшов зручний набір специфікації, що об’єднав багато конфліктуючі напрями в стандартизації UNIX, головну частину яких складають вищезазначені документи. Інші представлені розробки охоплювали основні команди UNIX та обробку виводу на екран.
З точки зору системного програмування, документи XSI формують практичну базу, і безліч прикладів з книги буде виконуватися на більшості існуючих платформ UNIX. Стандарт Х / Open об’єднує ряд відповідних і доповнюють один одного стандартів з їх практичною реалізацією. Він об’єднав в собі ANSI / ISO стандарт мови С, важливий базовий стандарт POSIX (IEEE 1003.1-1990) і стандарт SVID, а також запозичив елементи специфікацій Open Software Foundation (Організації відкритого програмного забезпечення) і деякі відомі функції з системи Berkeley UNIX, що зробила великий вплив на розвиток UNIX систем в цілому.
Звичайно, стандартизація продовжилася і надалі. У 1996 р. в результаті злиття Х / Open і OSF (Open Software Foundation) утворилася Група відкритих стандартів (The Open Group). Останні розробки (На момент написання книги) зі стандарту POSIX, з урахуванням досвіду практичної реалізації, Група відкритих стандартів називає другою версією Single UNIX Specification (Єдиної специфікації UNIX, далі по текстом – SUSV2), яка, в свою чергу, містить п’ятий випуск System Interface Definitions, System Interfaces and Headers і Networking Services. Ці важливі, хоч і спеціалізовані, доповнення охоплюють такі області, як потоки, розширення реального часу і динамічна компоновка.

На закінчення зазначимо, що:
– Всі стандарти є дуже великими, охоплюючи альтернативні методи реалізації і рідко використовуються, але все ж важливі функціональні можливості. Основна увага в цій книзі приділяється основам програмування в середовищі UNIX, а не повного опису системи відповідно до базовими стандартами;
– При необхідності створення програми, суворо наступного стандартам, необхідно передбачити в ній установку (і перевірку) відповідних прапорів, таких як _XOPEN_SOURCE або _POSIX_SOURCE.

Структура книги

Книга складається з тринадцяти глав.
Глава 1 являє собою огляд основних понять і термінології. Два найбільш важливих з обговорюваних термінів – це файл (file) і процес (process). Ми сподіваємося, що більшість читачів книги вже хоча б частково знайомі з наведеними в розділі матеріалом (див. у наступному розділі передумови для вивчення книги).
У розділі 2 описані системні примітиви доступу до файлів, включаючи відкриття та створення файлів, читання і запис даних в них, а також довільний доступ до вмісту файлів. Представлені також способи обробки помилок, які можуть генеруватися системними викликами.
У розділі 3 вивчається контекст роботи з файлами. У ній розглянуті питання володіння файлами, управління системними привілеями в системі UNIX та оперування атрибутами файлів за допомогою системних викликів.
Глава 4 присвячена концепції дерева каталогів (directories) з точки зору програміста. У неї також включено коротке обговорення файлових систем (file systems) і спеціальних файлів (special files), використовуваних для подання пристроїв.
Глава 5 присвячена природі процесів UNIX і методам роботи з ними. У ній подаються і детально пояснюються системні виклики fork і ехес. Наводиться приклад простого командного інтерпретатора (command processor).
Глава 6 – перша з трьох розділів, присвячених взаємодії між процесами. Вона охоплює сигнали (signals) і обробку сигналів (signal handling) і вельми корисна для перехоплення помилок і обробки аномальних ситуацій.
У главі 7 розглядається найбільш корисний метод взаємодії між процесами в системі UNIX – програмні канали, або конвеєри (pipes), що дозволяють передавати вихід однієї програми на вхід іншої. Буде досліджено створення каналів, читання і запис з їх допомогою, а також вибір з безлічі каналів.
Глава 8 присвячена методам взаємодії між процесами, які були вперше введені в ОС System V. У ній описані блокування записів (record locking), передача повідомлень (message passing), семафори (Semaphores) і колективна пам’ять (shared memory).
У розділі 9 розглядається робота терміналу на рівні системних викликів. Представлений приклад використання псевдотермінали (pseudo terminals).
У главі 10 дається короткий опис мережевої організації UNIX і розглядаються сокети (sockets), які можуть використовуватися для пересилання даних між комп’ютерами.
У главі 11 ми відходимо від системних викликів і починаємо розгляд основних бібліотек. У цьому розділі наведено систематичний виклад стандартної бібліотеки введення / виводу (Standard I / O Library), яка містить набагато більше коштів для роботи з файлами, ніж системні примітиви, представлені в розділі 2.
Глава 12 дає огляд додаткових системних викликів і бібліотечних процедур, багато з яких дуже важливі при створенні реальних програм. Серед обговорюваних тем – обробка рядків, функції роботи з часом і функції управління пам’яттю.
І, нарешті, глава 13 містить завдання з рішеннями, узагальнюючими весь попередній матеріал.
 

Глава 1. Основні поняття і термінологія

 

В цьому розділі зроблено короткий огляд основних ідей та термінології, які будуть використовуватися в книзі. Почнемо з поняття файл (file).

1.1. Файл

В системі UNIX інформація знаходиться в файлах. Типові команди UNIX, що працюють з файлами, включають в себе наступні:
$ vi my_test.pas
яка викличе редактор vi для створення і редагування файлу my_test.pas;
$ cat my_test.pas
яка виведе на термінал вміст файлу my_test.pas;
$ fpc my_test.pas
яка викличе компілятор мови Паскаль для створення програми my_test з вихідного файлу my_test.pas, якщо файл my_test.pas не містить помилок.
Більшість файлів буде належати до певної логічної структури, заданої користувачем, який їх створює. Наприклад, документ може складатися з слів, рядків, абзаців і сторінок. Тим не менш, з точки зору системи, всі файли UNIX представляють собою прості неструктуровані послідовності байтів або символів. Надані системою примітиви дозволяють отримати доступ до окремих байтам послідовно або в довільному порядку. Не існує вбудованих у файли символів кінця запису або кінця файлу, а також різних типів записів, які потрібно було б узгоджувати.
Ця простота є концептуальною для філософії UNIX. Файл в системі UNIX є ясним і загальним поняттям, на основі якого можуть бути сконструйовані більш складні і специфічні структури (такі як індексний організація файлів). При цьому безжально усуваються зайві подробиці й особливі випадки. Наприклад, у звичайному текстовому файлі символ переходу на наступний рядок (зазвичай символ перекладу рядка ASCII), що визначає кінець рядка тексту, в системі UNIX являє собою всього лише один із символів, який може читатися і записуватися системними утилітами і користувацькими програмами. Тільки програми, які передбачають, що на їх вхід подається набір рядків, повинні дбати про семантику символу перекладу рядка.

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


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

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

Ваш отзыв

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

*

*