Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
594 из 715
h›
#include ‹sys/ipc.h›
#include ‹sys/shm.h›
#define SHMKEY 75
#define K 1024
int shmid;
main() {
int i, *pint;
char *addr1, *addr2;
extern char *shmat();
extern cleanup();
for (i = 0; i ‹ 20; i++) signal(i, cleanup);
shmid = shmget(SHMKEY, 128*K, 0777IPC_CREAT);
addr1 = shmat(shmid, 0, 0);
addr2 = shmat(shmid, 0, 0);
printf("addr1 0x%x addr2 0x%x\n", addr1, addr2);
pint = (int *) addr1;
for (i = 0; i ‹ 256, i++) *pint++ = i;
pint = (int *) addr1;
*pint = 256;
pint = (int *) addr2;
for (i = 0; i ‹ 256, i++) printf("index %d\tvalue %d\n", i, *pint++);
pause();
}
cleanup() {
shmctl(shmid, IPC_RMID, 0);
exit();
}
Рисунок 11.11. Присоединение процессом одной и той же области разделяемой памяти дважды
#include ‹sys/types.h›
#include ‹sys/ipc.h›
#include ‹sys/shm.h›
#define SHMKEY 75
#define K 1024
int shmid;
main() {
int i, *pint;
char *addr;
extern char *shmat();
shmid = shmget(SHMKEY, 64*K, 0777);
addr = shmat(shmid, 0, 0);
pint = (int *) addr;
while (*pint == 0);
for (i = 0; i ‹ 256, i++) printf("%d\n", *pint++);
}
Рисунок 11.12. Разделение памяти между процессами
Рисунок 11.13. Структуры данных, используемые в работе над семафорами
Синтаксис вызова системной функции semget:
id = semget(key, count, flag);
где key, flag и id имеют тот же смысл, что и в других механизмах взаимодействия процессов (обмен сообщениями и разделение памяти). В результате выполнения функции ядро выделяет запись, указывающую на массив семафоров и содержащую счетчик count (Рисунок 11.13).
|< Пред. 592 593 594 595 596 След. >|