- •Анотація
- •1 Середовище програмування ос unix
- •1.1 Структура ос unix
- •1.2 Створення програми
- •1. Препроцесор
- •2. Транслятор
- •2.1 Компілятор
- •2.2 Асемблер
- •3. Редактор зв'язків(Компонувальником)
- •1.3 Формати об'єктних файлів
- •2 Використання файлової системи unix
- •2.1 Основні поняття
- •2.1.1 Типи та іменування файлів
- •2.1.2 Права доступу до файлів
- •2.1.3 Cистемные структури керування файлами
- •2.1.4 Системні виклики роботи з файлами
- •2.2 Створення та відкриття файлів
- •2.2.1 Системний виклик open
- •2.2.2 Системний виклик create
- •2.2.3 Системний виклик close
- •2.3 Читання та зипис в файл
- •2.3.1 Системний виклик read
- •2.3.2 Системний виклик write
- •2.4 Позіціонування у файлі
- •2.4.1 Системний виклик lseek
- •2.4.2 Системні виклики pread і pwrite
- •2.4.3 Системні виклики readv і writev
- •2.5 Контрольні операції над файлами
- •2.5.1 Системні виклики stat, fstat і lstat
- •2.5.2 Контроль прав доступу до файлу
- •2.5.3 Функція fcntl
- •2.5.4 Системні виклики truncate і ftruncate
- •2.6 Управління каталогами
- •2.6.1 Створення і видалення
- •2.6.2 Читання каталога
- •2.6.3 Зміна каталога
- •2.7 Управління посиланнями
- •2.7.1 Управління жорсткими посиланнями
- •2.7.2 Управління символічними посиланнями
- •2.7.3 Перейменування файлів і каталогів
- •3 Керування процесами ос unix
- •3.1 Процеси ос unix
- •3.2 Сисвизови створення процесів
- •3.3 Завершення процесу
- •3.4 Взаємодія процесів в ос unix
- •3.5 Сигнали
- •3.5.1 Поняття сигналу
- •3.5.2 Розробка оброблювачів сигналів
- •3.5.3 Генерація сигналів
- •3.5.4 Посилка сигналів іншим процесам
- •3.5.5 Блокування сигналів
- •3.5.6 Очікування сигналу
- •3.6 Трасування процесу.
- •3.7 Канали й fifo-Файли
- •3.7.1 Поняття
- •3.7.2 Створення каналу
- •3.7.3 Створення fifo-Файлів
- •3.8 Семафори
- •3.9 Повідомлення.
- •3.10 Поділювана пам'ять.
- •Література
- •Системне програмування Навчальний посібник
- •65082, Одеса, вул. Дворянська, 1/3
2 Використання файлової системи unix
2.1 Основні поняття
2.1.1 Типи та іменування файлів
Файлами є області пам'яті на зовнішньому носієві (як правило магнітному диску), призначені для зберігання даних.
Файли відрізняються від звичайних масивів тим, що
вони можуть змінювати свій розмір;
звернення до елементів цих масивів проводиться не за допомогою операції індексації [], а за допомогою спеціальних системних викликів і функцій;
доступ до елементів файлу відбувається в так званій "позиції читання/запису", яка автоматично просувається при операціях читання/запису, тобто файл є видимим послідовно. Є, правда, функції для довільної зміни цій позиції.
Файли мають імена і організовані в ієрархічну деревовидну структуру з каталогів і простих файлів.
Усередині UNIX'а розрізняються разные типу файлів. Така відмінність пов'язана із способами управління структурою файлів і контролем за передачею в нього даних.
Звичайні файли, тобто початкові тексти і двійкові коди програм або тексти документів. У загальному випадку регулярні файли визначаються і контролюються користувачами, тобто запис, читання і управління повноваженнями в них проводяться користувачем.
Директорії є маршрутним деревом для виявлення конкретного файлу у файловій системі. Структура директорії контролюється ОС і користувач її модифікувати не може. Користувач може тільки читати файли директорії, але записувати в них може тільки ОС.
Спеціальні файли пристроїв - це файли, що забезпечують передачу даних відповідним пристроям. Типів таких пристроїв в UNIX чотири: познаковой передачі, передачі по блоках, raw blocks (що не буферизують) і терміналів введення/виводу. По спеціальному дозволу користувач може дістати доступ на запис або читання в спеціальні файли за допомогою інструкцій оболонки або через системні виклики з програми.
Канали – це файли, що забезпечують напівдуплексну межпроцессное взаємодію. PIPE може містити будь-які типи даних, що поміщаються в них користувачем або ОС. Єдине обмеження в них - вони не можуть взяти більше 10 блоків даних. Якщо дані в ці файли поміщаються користувачем, структура такого файлу підвладна контролю з боку користувача. Проте попереднє таке право треба отримати, використовуючи макроси ініціалізації.
Сокети - це файли, що забезпечують повнодуплексну межпроцессное взаємодію.
Символічне посилання (symbolic link) - це спеціальний файл, який містить шлях до іншого файлу.
У ОС UNIX підтримується три способи вказівки імен файлів:
Коротке ім'я. Ім'я, що не містить спеціальних метасимволів коса межа (/), є коротким ім'ям файлу. По короткому імені можна послатися на файли поточного каталога.
Відносне ім'я. Ім'я, що не починається з символу косої межі (/), але що включає такі символи. Воно посилається на файл щодо поточного каталога.
Абсолютне (повне) ім'я. Ім'я, що починається з символу косої межі (/). Воно посилається на файл щодо кореневого каталога.
Інші символи, окрім косої межі, не мають в іменах файлів UNIX особливого значення (це не метасимволи). Зокрема, немає системного поняття розширення файлу. Імена файлів чутливі до регістра.
У ОС UNIX немає теоретичних обмежень на кількість вкладених каталогів. Проте, в кожній реалізації є практичні обмеження на максимальну довжину імені файлу, яке указується в командах (як і на довжину командного рядка в цілому).
Проте, з погляду системи, всіма файлами UNIX є прості неструктуровані послідовності байтів або символів. Примітиви, що надаються системою, дозволяють дістати доступ до окремих байтів послідовно або в довільному порядку. Не існує вбудованих у файли символів кінця запису або кінця файлу, а також різних типів записів, які потрібно було б погоджувати.