Материал: 396_OS_uchebnoe_posobie_part1_2012

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

Листинг 23. Программа, реализующая клиент

31.sprintf(msgptr->buff, “Здравствуй, Мир!\n”);

32./*Oсвободим разделяемую память*/

33.if (semop(semid, &mem_unlock[0], 1) < 0){

34.printf(“Невозможно выполнить операцию\n”); exit(1);

35.}

36./* Ждём, пока сервер в свою очередь не освободит *

* разделяемую память

*/

37.if (semop(semid, &mem_lock[0], 2) < 0){

38.printf(“Невозможно выполнить операцию\n”); exit(1);

39.}

40./*Отключимся от области*/

41.if (shmdt(msgptr) < 0){

42.printf(“Ошибка отключения\n”); exit(1);

43.}

44./*Удалим созданные объекты IPC*/

45.if (shmctl(shmid, IPC_RMID, 0) < 0){

46.printf(“Невозможно удалить область\n”); exit(1);

47.}

48.if (semctl(semid, 0, IPC_RMID) < 0){

49.printf(“Невозможно удалить семафор\n”); exit(1);

50.}

51.exit(0);

52.}

Контрольные вопросы

1.Перечислите средства межпроцессного взаимодействия.

2.Как происходит передача аргументов исполняемой программе?

3.Какие функции используются для разпознавания опций? Чем отличается длинная опция от короткой?

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

5.Для чего предназначен сигнал SIGCHLD? Почему важно, чтобы родительский процесс «дождался», пока завершится дочерний?

6.Расскажите о синхронизации выполнения нитей. Что такое mutex?

7.Расскажите о взаимодействии процессов через программные каналы.

8.Что такое FIFO? Как организовать взаимодействие процессов через именованный канал?

9.Что такое сигнал? Какие типы сигналов Вы знаете? Поясните каждый тип.

10.Для чего используется системный вызов raise?

11.Как организовать передачу сообщений между процессами?

12.Что такое семафор? Поясните применение семафоров на примере.

111

13. Как организовать обмен данными между процессами через разделяемую память? Какие функции для этого используют?

112

СПИСОК ЛИТЕРАТУРЫ

1.Таненбаум Э. Операционные системы: разработка и реализация. 3-е изд. /

Э. Таненбаум, А. Вудхалл. – СПб.: Питер, 2007. – 704 с. – ISBN 978-5-469- 01403-4.

2.Стивенс У. UNIX: взаимодействие процессов / У. Стивенс. – СПб.: Питер, 2003. – 576 с. – ISBN 5-318-00534-9.

3.Иванов Н.Н. Программирование в Linux. Самоучитель. / Н.Н. Иванов. –

СПб.: БХВ-Петербург, 2007. – 416 с. – ISBN 978-5-9775-0071-5.

4. Немет Э. UNIX: руководство системного администратора / Э. Немет,

Г. Снайдер, С. Сибасс, Т.Р. Хейн. – Киев: BHV, 2002. – 928 с. – ISBN 966- 552-106-3.

5.Бэкон Д. Операционные системы / Д. Бэкон, Т. Харрис. – Киев: BHV, 2004. – 800 с. – ISBN 966-552-136-5.

6.Краковяк С. Основы организации и функционирования ОС ЭВМ: Пер. с

франц. / С. Краковяк. – М.: Мир, 1988. – 480 с. – ISBN 5-03-00481-5.

7.Олифер В.Г. Сетевые операционные системы. 2-е изд. / В.Г. Олифер,

Н.А. Олифер. – СПб.: Питер, 2009. – 672 с. – ISBN 978-5-91180-528-9.

8.Таненбаум Э. Современные операционные системы. 3-е изд. / Э. Таненбаум.

– СПб.: Питер, 2010. – 1120 с. – ISBN 978-5-49807-306-4.

9.Столингс В. Операционные системы. 4-е изд.: Пер. с англ. / В. Столингс. –

М.: Вильямс, 2004. – 848 с. – ISBN 5-8459-0310-6.

10. Таненбаум Э. Распределённые системы. Принципы и парадигмы / Э. Танненбаум, М. ван Стеен. – СПб.: Питер, 2003. – 880 с. – ISBN 5-272- 00053-6.

113

ПРИЛОЖЕНИЕ 1 КОДЫ ОШИБОК

Код ошибки

Сообщение

Описание

E2BIG

Аrg list too long

Размер списка аргументов, переданных системному

 

 

вызову ехес, плюс размер экспортируемых перемен-

 

 

ных окружения превышает ARGMAX байт.

EACCESS

Permission denied

Попытка доступа к файлу с недостаточными правами

 

 

для данного класса (определяемого эффективными

 

 

UID и GID процесса и соответствующими идентифи-

 

 

каторами файла).

EAGAIN

Resource

Превышен предел использования некоторого ресурса,

 

temporarily

например, переполнена таблица процессов, или поль-

 

unavailable

зователь превысил ограничение по количеству про-

 

 

цессов с одинаковым UID. Причиной также может

 

 

являться недостаток памяти или превышение соответ-

 

 

ствующего ограничения.

EALREADY

Operation already in

Попытка операции с неблокируемым объектом, уже

 

progress

обслуживающим некоторую операцию.

EBADF

Bad file number

Попытка операции с файловым дескриптором, не ад-

 

 

ресующим никакой файл; также попытка операции

 

 

чтения или записи с файловым дескриптором, полу-

 

 

ченным при открытии файла на запись или чтение,

 

 

соответственно.

EBADFD

File descriptor in bad

Файловый дескриптор не адресует открытый файл

 

state

или попытка операции чтения с файловым дескрип-

 

 

тором, полученным при открытии файла только на

 

 

запись.

EBUSY

Device busy

Попытка монтирования устройства (файловой систе-

 

 

мы), которое уже примонтировано; попытка размон-

 

 

тировать файловую систему, имеющую открытые

 

 

файлы; попытка обращения к недоступным ресурсам

 

 

(семафоры, блокираторы и т.п.).

ECHILD

No child processes

Вызов функции wait процессом, не имеющим дочер-

 

 

них процессов или процессов, для которых уже был

 

 

сделан вызов wait.

EDQUOT

Disk quota exceeded

Попытка записи в файл, создание каталога или файла

 

 

при превышении квоты пользователя на дисковые

 

 

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

 

 

пользовательской квоты на число inode.

EEXIST

File exists

Имя существующего файла использовано в недопус-

 

 

тимом контексте, например, сделана попытка созда-

 

 

ния символической ссылки с именем уже сущест-

 

 

вующего файла.

EFAULT

Bad address

Аппаратная ошибка при попытке использования сис-

 

 

темой аргумента функции, например, в качестве ука-

 

 

зателя передан недопустимый адрес.

EFBIG

File too large

Размер файла превысил установленное ограничение

 

 

RLIMIT_FSIZE или максимально допустимый размер

 

 

для данной файловой системы.

114

EINPROGRESS

Operation now in

Попытка длительной операции (например, уста-

 

progress

новление сетевого соединения) для неблокируемо-

 

 

го объекта.

EINTR

Interrupted system

Получение асинхронного сигнала, например, сигнала

 

call

SIGINT или SIGQUIT, во время обработки системно-

 

 

го вызова. Если выполнение процесса будет продол-

 

 

жено после обработки сигнала, прерванный систем-

 

 

ный вызов завершится с этой ошибкой.

EINVAL

Invalid argument

Передача неверного аргумента системному вызову.

 

 

Например, размонтирование устройства (файловой

 

 

системы), которое не было примонтировано. Другой

 

 

пример – передача номера несуществующего сигнала

 

 

системному вызову kill.

ЕIO

I/O error

Ошибка ввода-вывода физического устройства.

EISDIR

Is a directory

Попытка операции, недопустимой для каталога, на-

 

 

пример, запись в каталог с помощью вызова write.

ELOOP

Number of symbolic

При попытке трансляции имени файла было обнару-

 

links encountered

жено недопустимо большое число символических

 

during path name

ссылок, превышающее значение MAXSYMLINKS.

 

traversal exceeds

 

 

MAXSYMLINKS

 

EMFILE

Too many open files

Число открытых файлов для процесса превысило

 

 

максимальное значение OPENMAX.

ENAMETOOLONG

File name too long

Длина полного имени файла (включая путь) превыси-

 

 

ла максимальное значение РАТНМАХ.

ENFILE

File table overflow

Переполнение файловой таблицы.

ENODEV

No such device

Попытка недопустимой операции для устройства. На-

 

 

пример, попытка чтения устройства только для запи-

 

 

си или операция для несуществующего устройства.

ENOENT

No such file or di-

Файл с указанным именем не существует или отсут-

 

rectory

ствует каталог, указанный в полном имени файла.

ENOEXEC

Exec format error

Попытка запуска на выполнение файла, который име-

 

 

ет права на выполнение, но не является файлом до-

 

 

пустимого исполняемого формата.

ENOMEM

Not enough space

При попытке запуска программы (ехес) или размеще-

 

 

ния памяти (brk) размер запрашиваемой памяти пре-

 

 

высил максимально возможный в системе.

ENOMSG

No message of de-

Попытка получения сообщения определённого типа,

 

sired type

которого не существует в очереди.

ENOSPC

No space left on de-

Попытка записи в файл или создания нового каталога

 

vice

при отсутствии свободного места на устройстве (в

 

 

файловой системе).

ENOSR

Out of stream

Отсутствие очередей или головных модулей при по-

 

resources

пытке открытия устройства STREAMS. Это состоя-

 

 

ние является временным. После освобождения соот-

 

 

ветствующих ресурсов другими процессами операция

 

 

может пройти успешно.

ENOSTR

Not a stream device

Попытка применения операции, определённой для

 

 

устройств типа STREAMS (например, системного вы-

 

 

зова putmsg или gefmsg), для устройства другого типа.

ENOTDIR

Not a directory

В операции, предусматривающей в качестве аргумен-

 

 

та имя каталога, было указано имя файла другого ти-

115

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