Реферат: Interprocess Communication

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

1й процесс:

#include <stdio.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

int main(void)

{ key_t key;

int semid, shmid;

struct sembuf sops;

char *shmaddr;

char str[256];

key = ftok(“/usr/mash/exmpl”,’S’); /* создаем уникальный ключ */

semid = semget(key,1,0666 | IPC_CREAT); /* создаем один семафор с определенными правами доступа */

shmid = shmget(key,256, 0666 | IPC_CREAT); /*создаем разделяемую память на 256 элементов */

shmaddr = shmat(shmid, NULL, 0); /* подключаемся к разделу памяти, в shaddr - указатель на буфер с разделяемой памятью*/

semctl(semid,0,IPC_SET, (union semun) 0); /*инициализируем семафор со значением 0 */

sops.sem_num = 0; sops.sem_flg = 0;

/* запуск бесконечного цикла */

while(1) { printf(“Введите строку:”);

if ((str = gets(str)) == NULL) break;

sops.sem_op=0; /* ожидание обнуления семафора */

semop(semid, &sops, 1);

strcpy(shmaddr, str); /* копируем строку в разд. память */

sops.sem_op=3; /* увеличение семафора на 3 */

semop(semid, &sops, 1);

}

shmaddr[0]=’Q’; /* укажем 2ому процессу на то, */

sops.sem_op=3; /* что пора завершаться */

К-во Просмотров: 362
Бесплатно скачать Реферат: Interprocess Communication