Системне програмування в UNIX засобами Free Pascal (исходники

Про книгу

В основу даної книги покладено друге видання керівництва програміста 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>

*

*