Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вступ, ст 22-93.doc
Скачиваний:
5
Добавлен:
02.09.2019
Размер:
1.62 Mб
Скачать

Системні виклики для управління файлами

Багато системні виклики мають відношення до файлової системи. У цьому розділі ми розглянемо виклики, що працюють з окремими файлами, а в наступному розділі звернемося до тих, які оперують каталогами або файлової системи у цілому. Щоб прочитати або записати файл, його спочатку потрібно відкрити за допомогою виклику open. Для цього виклику вказується ім'я файлу (задається або абсолютний шлях до файлу, або посилання на робочий каталог) і код O_RDONLY, O_WRONLYnnH O_RDWR, що означає, що файл відкривається для читання, запису або і того й іншого. Для створення нового файлу використо-вується код O_CREAT. Повертається дескриптор файлу потім можна вжити при читанні або запису. Потім файл закривається за допомогою виклику close, який робить дескриптор файлу доступним при наступному відкритті (open).

Найбільш часто використовуваними викликами, без сумніву, є read і write.

Виклик read ми вже обговорювали, write має ті ж самі параметри. Незважаючи на те що більшість програм читає і записує файли з по-

допомогою послідовного доступу, деяким прикладним програмам необхідна можливість доступу до будь-якої, випадково вибраної частини файлу. Зв'язаний

з кожним файлом покажчик містить поточну позицію у файлі. Коли читання

(Запис) здійснюється послідовно, він зазвичай вказує на байт, який повинен бути прочитаний (записано) наступним. Виклик lseek може змінити значення

значення позиції покажчика, так що наступний виклик read або write розпочне операцію де-небудь в іншій ділянці файла.

У дзвінка 1 seek є три параметри: Перший - це ідентифікатор файлу, другий - позиція у файлі, а третій каже, чи є другий параметр позицією у файлі відносно початку файлу (абсолютна позиція), щодо поточної позиції або щодо кінця файлу. Виклик 1 seek повертає абсолютну позицію у файлі після зміни покажчика. Для кожного файлу UNIX зберігає такі дані: тип файлу (звичайний, спеціальний, каталог і т. д.), розмір, час останньої зміни та іншу інформацію. Програма може запитати цю інформацію через системний виклик stat. Його перший параметр визначає необхідний файл, а другий вказує на структуру, куди потрібно помі-стити інформацію.

Системні виклики для управління каталогами

У цьому розділі ми розглянемо деякі системні виклики, пов'язані швидше до каталогів і файлової системи в цілому, ніж просто до певного файлу, як у попере-дньому розділі. Перші два виклики, mkdir і rmdir, відповідно створюють і видаляють порожні каталоги. Наступний виклик-link. Він дозволяє одному файлу з'являтися під двома або більше іменами, часто в різних каталогах.Цей виклик зазвичай використовується, коли кілька програмістів, які працюють в одній команді, повинні спільно використовувати один загальний файл. Тоді цей

файл може з'явитися в каталозі в кожного з програмістів, можливо, під іншим ім'ям. Поділ (спільне використання) файлу - це не те ж саме, що копіювання файлу для кожного члена команди. При поділі файлу зміни, вироблені одним програмістом, негайно стають видимими для інших - все відбувається в одному файлі. А при створенні копії файлу подальші зміни не впливають на інші копії цього файлу.Щоб побачити, як працює виклик link, розглянемо ситуацію на рис. 1.19, а.Два користувача, ast wjim, мають свої власні каталоги ast і jim з файлами.

Якщо тепер користувач ast запустить програму, що містить системний виклик