Архитектура операционной системы 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 След. >|

Java книги

Контакты: [email protected]