Приклад 7.1
В якості параметрів програми для запису даних до сегмента поділяємої пам'яті слід задавати поля:
$ prog7_1 w Message_text_1
$ prog7_1 w Message_text_2
………
$ prog7_1 w Message_text_n
Для читання даних, які знаходяться у сегменті поділяємої пам'яті, задається опція r:
$ prog7_1 r
Для вилучення всіх даних з сегмента поділяємої пам'яті, користувач повинен задати команду:
$ prog7_1 d
У багатьох випадках є потрібно стежити за виконанням необхідних дій стосовно сегментів поділяємої пам'яті (команда ipcs, лаб. робота №5). Вилучити сегмент можна за допомогою команди ipcrm з опцією shm та ідентифікаційним номером процесу. Роздрук 7.1 демонструє роботу програми 7.1 та її можливі взаємодії зі стандартними механізмами управління поділяємою пам'яттю:
KSI Linux release 1.1 (CyberZOO)
Kernel 2.0.33 on an i486
login: hoshaba
Password:
Last login: Tue Feb 24 20:01:46 on tty1
[root@lili hoshaba]# cd test/
[root@lili test]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 nobody 600 46084 7 dest
0x00280267 1 root 644 102400 43
[root@lili test]# ./prog7_1 w "This is a example text..."
Creating new shared memory segment
Done...
[root@lili test]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 nobody 600 46084 7 dest
0x00280267 1 root 644 102400 43
0x53030811 386 root 666 100 0
[root@lili test]# ./prog7_1 r
Shared memory segment exists - opening as client
segptr: This is a example text...
[root@lili test]# ./prog7_1 d
Shared memory segment exists - opening as client
Shared memory segment marked for deletion
[root@lili test]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 nobody 600 46084 7 dest
0x00280267 1 root 644 102400 43
[root@lili test]# ./prog7_1 w "This is a example text..."
Creating new shared memory segment
Done...
[root@lili test]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 nobody 600 46084 7 dest
0x00280267 1 root 644 102400 43
0x53030811 514 root 666 100 0
[root@lili test]# ipcrm shm 514
resource deleted
[root@lili test]# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 0 nobody 600 46084 7 dest
0x00280267 1 root 644 102400 43
[root@lili test]# logout
Роздрук 7.1
Контрольні питання
Назвіть призначення механізмів поділяємої пам'яті.
Назвіть відмінності та переваги поділяємої пам'ятті та інших вивчених механізмів міжпроцесних комунікацій.
Поясніть значення системних викликів (функцій) shmget, shmetl, shmat, та shmdt.
У програмі 7.1 визначте основні блоки: створення сегмента поділяємої пам'яті, запис, читання та знищення даних у сегменті поділяємої пам'яті, зміна параметрів доступу до сегментів.
Поясніть призначення та роботу функції strcpy у рядку 47 програми 7.1.
Завдання
Одержати та відкомпілювати програму 7.1. Запам'ятати попередні значення системи поділяємої пам'яті. Виконати програму 7.1. і записати значення системи поділяємої пам'яті. Вилучити наслідки роботи програми з поділяємої пам'яті за допомогою команди ipcrm.
Підготувати звіт по лабораторній роботі.
Зміст звіту:
короткі відповіді на контрольні питання;
призначення програми 7.1;
алгоритм і текст програми 7.1.
Література
Бабушкин М., Иваненко С., Коростелев В. Web-сервер в действии - СПб: Питер, 1997.-272 с.
Болски М.И. Язык программирования Си. Справочник.-М.: Радио и связь, 1988. – 96с.
Джемса К., Коун К. Программирование для Internet в среде Windows.-С-Петербург: Питер, 1996.-487с.
Дунаев С. Unix System V. Release 4.2. Общее руководство.-М.:”Диалог-МИФИ”, 1995.-287с.
Ларри Шамер, Крис Негус Unix без проблем. Руководство пользователя.-М.:“Бином”, 1996.-352с.
Scott Burkett B., Sven Goldt, John D. Harper, Sven van der Meer, Matt Welsh Linux Programmer's Guide - The Documentation Project, 1994-1995
7.FreeBSD Handbook - The FreeBSD Documentation Project, October 1997