Материал: 6262

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

51

ляции pathname;

EIO — случилась ошибка ввода/вывода.

Замечание

Удаляя имя из файловой системы, unlink(...) учитывает, что:

если это имя было последней ссылкой на файл и больше нет процессов, которые

держат этот файл открытым, данный файл удаляется и место, которое он занимает освобождается для дальнейшего использования;

если имя было посленей ссылкой на файл, но какие-либо процессы все еще

держат этот файл открым, файл будет оставлен пока последний файловый дескриптор, указывающий на него, не будет закрыт;

если имя указывает на символьную ссылку, ссылка будет удалена;

если имя указывает на сокет, FIFO или устройство, имя будет удалено, но

процессы, которые открыли любой из этих объектов могут продолжать его использовать.

Таким образом, мы видим, что в общем случае, один файл может иметь несколь-ко имен.

Для создания новых имен, которые интерпретируются как имена файлов, стандарт POSIX предоставляет два системных вызова:

link() - создает новую ссылку на существующий файл (на i-узел) внутри одной

файловой системы, известную также как "жесткая" ссылка; она имеет теже свойства, что и старое имя, поэтому их оригинальность их установить невозможно;

symlink() - создает символьную ссылку на имя предположительно существую-

щего файла, независимо от файловой системы, в которой оно должно находиться; если такого файла не существует, то ссылка называется «висячей».

Системный вызов link(...) имеет следующий синтаксис:

#include <unistd.h>

int link(const char *oldpath, const char *newpath);

где oldpath — имя существующего файла;

newpath — новое имя файла, в тойже файловой системе, что и старое.

В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается следующим образом:

EXDEV oldpath и newpath находятся на разных файловых системах;

EPERM — файловая система, содержащая oldpath и newpath, не поддерживает жесткие ссылки;

EFAULT oldpath или newpath указывают за пределы доступного адресного пространства;

EACCES — запись в каталог, содержащий newpath, не разрешен для uid процесса, или же один из каталогов oldpath или newpath не разрешает поиск;

ENAMETOOLONG oldpath или newpath слишком длинны;

52

ENOENT — одна из частей пути oldpath или newpath не существует или является "висячей" символической ссылкой;

ENOTDIR — компонент пути, использованный как каталог в oldpath или newpath, в действительности таковым не является;

ENOMEM - ядру не хватило памяти;

EROFS - файл находится на файловой системе, смонтированной только для чтения;

EEXIST - newpath уже существует;

EMLINK - файл, на который ссылается oldpath уже имеет максимальное количество ссылок;

ELOOP - oldpath или newpath содержат зацикленную символическую ссылку, то есть при ее подстановке происходит ссылка на нее саму;

ENOSPC - на устройстве, содержащем файл, нет места для создания новой

записи в каталоге; это может произойти также, если исчерпана квота дискового пространства пользователя;

EPERM - oldpath является записью . or ..

Системный вызов symlink(...) имеет следующий синтаксис:

#include <unistd.h>

int symlink(const char *oldpath, const char *newpath);

где oldpath — имя существующего файла;

newpath — новое имя файла, в тойже файловой системе, что и старое.

В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается следующим образом:

EPERM — файловая система, содержащая pathname, не поддерживает создание символьных ссылок;

EFAULT oldpath или newpath указывают за пределы доступного адресного пространства;

EACCES — доступ для записи в каталог, содержащий newpath, не разрешен

для эффектиного uid владельца процесса, или же один из каталогов, являющихся частью newpath, не допускает поиск;

ENAMETOOLONG oldpath или newpath слишком длинны;

ENOENT — одна из частей пути oldpath или newpath не существует или является "висячей" символьной ссылкой;

ENOTDIR — компонент пути, использованный как каталог в oldpath или newpath, в действительности таковым не является.

ENOMEM — ядру не хватило памяти;

EROFS — файл находится на файловой системе, смонтированной только для чтения.

EEXIST newpath уже существует;

ELOOP newpath является зацикленной символьной ссылкой, то есть при подстановке возникает ссылка на неё саму;

53

ENOSPC — на устройстве, содержащем newpath, нет места для создания

новой записи в каталоге; это может произойти также, если исчерпана квота дискового пространства пользователя.

Замечание

При использовании symlink(...):

не производится никакой проверки oldpath;

удаление файла, на который ссылается символьная ссылка, действительно

удалит файл, если только у него нет других жестких ссылок; если такое поведение нежелательно, то следует использовать link(...).

Далее, в следующем разделе данного пособия и при изучении других тем, мы будем постоянно пользоваться изученными выше системными вызовами.

Предполагается, что студент освоит эти функции на практике, в процессе программирования конкретных задач.

Замечание

На практике, часто используются и другие функции для работы с файловой систе-мой ОС, которые можно отнести к системным вызовам. Например, chdir(...), chroot(...), rename(…) и другие.

Предполагается, что студент, при необходимости, изучит их самостоятельно с помощью руководства man.

54

1.9 Лабораторная работа по теме №7

Для выполнения лабораторных работ №7 - №12 по дисциплине «Операционные системы. Часть 2» используется таже среда ОС УПК АСУ, что и при выполнении лабораторных работ №1 - №6, описанных в [4].

Отличительными особенностями является следующее:

используется новый архив темы os2, поэтому отчет по первой части лабораторных работ №1 - №6 следует сохранить отдельно на flashUSB студента;

для выполнения лабораторных работ №7 - №12 используется инструмен-

тальная среда разработки на языке С IDE Eclipse CDT.

Поэтому, для начала выполнения работ, студент должен сделать следующее:

запустить ОС УПК АСУ, как это делалось при изучении первой части дисциплины, не подключая темы (только до уровня пользователя asu);

обратиться к преподавателю и скопировать на личный flashUSB файл архива os2-home.ext4fs;

подключить тему os2, выйти из сесии asu и зайти пользователем upk.

Врезультате указанных действий, студент войдет в рабочую среду обучения, а заставка рабочего стола ОС будет иметь вид, как показанно на рисунке 1.16.

Рисунок 1.16 - Вид рабочего стола системы после загрузки темы os2

55

Замечание

Если заставка рабочего стола осталась как у пользователя asu, то студент должен самостоятельно уметь установить ее из файла /home/upk/Изображения/os2-img.png.

Рабочий стол имеет теже ярлыки, что и в первой части изучаенной дисциплины. Дополнительно добавлены:

os2_selfworks.pdf — методическое пособие по шести темам самостоятельной

работы студента, для второй части изуемой дисциплины, в котором отражены все вопросы теоретической части и лабораторных работ;

Отчет2.doc — шаблон отчета, который студент должен оформлять в процессе выполнения лабораторных работ;

EclipseC — значек запуска среды разработки Eclipse.

Учебники и методические пособия по изучаемой дисциплине находятся в директории /home/upk/Документы, где:

каталог Темы — содержит файлы пособий по первым шести темам;

каталог Темы2 — содержит файлы пособий по темам №7 - №12.

учебное пособие по данной изучаемой теме находится в файле Тема7_os.pdf.

1.9.1 Интегрированная среда разработки Eclipse

Интегрированная среда разработки Eclipse (Eclipse IDE), первоначально была разработана корпорацией IBM для собственных внутренних нужд. Со временем, поддержка и совершенствование такой системы стало проблематичной, поэтому дальнейшее сопровождение и развитие системы было передано некомерческой общественной организации Eclipse Foudation.

Eclipse IDE является свободным кроссплатформенным ПО, лицензия коорой соответствует Eclipse Public License. Эта среда писана на языке Java и, первоначально предназначалась для разработки программ на языке Java. Но, со временем, к ней стали добавляться модули, могут поддерживать многие языки программирования, включая C/C++, Perl, Ruby, Python, PHP и другие.

Позитивные качества этой системы:

свободно распространяемое ПО с высокой степенью переносимости;

простая форма установки, требующая только наличие исполнительной среды Java и отдельной директории для размещения дистрибутива.

Замечание

В среде ОС УПК АСУ установлен 64-битная версия Eclipse CDT (C/C++ Development Tools):

дистрибутива Eclipse CDT; установлек как стандартный пакет Arch Linux;

директория разработки /home/upk/workspaceC.

Источник: https://studfile.net/preview/16438530/