Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shp.doc
Скачиваний:
17
Добавлен:
18.09.2019
Размер:
5.46 Mб
Скачать
  1. Каталоги, файловые системы и специальные файлы

Каталоги – хранят имена файлов и позволяют пользователям группировать произвольные наборы файлов. Кроме файлов они также могут включать другие каталоги, которые называются подкаталогами и позволяют организовать следующие уровни классификации.

Реализация каталогов.

Каталоги имеют владельца, группу, размер и связанные с ними права доступа. Каталоги не могут быть созданы при помощи системных вызовов creat или open. Системный вызов open также не будет работать с каталогом, если установлен любой из флагов O_WRONLY или O_RDWR.

Структура каталогов состоит из набора элементов каталогов, по одному элементу для каждого содержащегося в них файла или подкаталога. Каждый элемент каталога состоит хотя бы из одного положительного числа, номера индексного дескриптора (inode number), и символьного поля, содержащего имя файла. При разработке программ не следует полагаться на формат каталога, а для того, чтобы сделать их переносимыми, необходимо использовать для работы с каталогами системные вызовы из спецификации XSI.

Cистемный вызов opendir служит для открытия каталога.

Передаваемый вызову opendir параметр является именем открываемого каталога. При успешном открытии каталога dirname вызов opendir возвращает указатель на переменную типа DIR. Определение типа DIR, представляющего дескриптор открытого каталога, находится в заголовочном файле <dirent.h>. Это определение аналогично определению типа FILE, используемого в стандартной библиотеке ввода/вывода. Указатель позиции ввода/вывода в полученном от функции opendir дескрипторе установлен на первую запись каталога. Если вызов завершился неудачно, то функция возвращает NULL.

Cистемный вызов closedir – служит для закрытия каталога (после окончания работы программы).

Вызовы readdir и rewinddir.

Функции readdir должен передаваться допустимый указатель на дескриптор открытого каталога, обычно возвращаемый предшествующим вызовом opendir. При первом вызове readdir в структуру dirent будет считана первая запись в каталоге. В результате успешного вызова указатель каталога переместится на следующую запись. Когда в результате последующих вызовов readdir достигнет конца каталога, то вызов вернет нулевой указатель. Если в какой-то момент потребуется начать чтение каталога с начала, то можно использовать системный вызов rewinddir.

Chdir – смена рабочего каталога. Первоначально в качестве текущего рабочего каталога процесса задается текущий рабочий каталог запустившего его процесса, обычно оболочки. Процесс может поменять свой текущий рабочий каталог при помощи системного вызова chdir.

Cистемный вызов mkdir – создание каталогов и подкаталогов. mkdir возвращает нулевое значение в случае успеха, и -1 - в случае неудачи

  1. Базовые примитивы для работы с процессами.

Системный вызов fork

Основным примитивом для создания процессов является системный вызов fork. Он является механизмом, который превращает UNIX в многозадачную систему.

В результате успешного вызова fork ядро создает новый процесс, который является почти точной копией вызывающего процесса. Созданный процесс называется дочерним процессом (child process), а процесс, осуществивший вызов fork, называется родителем (parent).

Системный вызов ехес.

Для смены исполняемой программы можно использовать функции семейства ехес. Основное отличие между разными функциями в семействе состоит в способе передачи параметров. В конечном итоге все эти функции выполняют один системный вызов execve.

Все множество системных вызовов ехес выполняет одну и ту же функцию: они преобразуют вызывающий процесс, загружая новую программу в его пространство памяти. Совместное использование вызовов ехес и fork.

Системные вызовы fork и ехес, объединенные вместе, представляют мощный инструмент для программиста. Благодаря ветвлению при использовании вызова ехес во вновь созданном дочернем процессе программа может выполнять другую программу в дочернем процессе, не стирая себя из памяти.

Системный вызов exit.

Системный вызов exit завершает процесс:

Единственный целочисленный аргумент вызова exit называется статусом завершения (exit status) процесса, младшие восемь бит которого доступны родительскому процессу при условии, если он выполнил системный вызов wait.

Системный вызов wait.

Системный вызов wait временно приостанавливает выполнение процесса, в то время как дочерний процесс продолжает выполняться.

После завершения дочернего процесса выполнение родительского процесса продолжится.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]