Основы операционных систем. Практикум



         

Example.6.1a - часть 2


}

}

/* Пытаемся отобразить разделяемую память в адресное

пространство текущего процесса. Обратите внимание на то,

что для правильного сравнения мы явно преобразовываем

значение -1 к указателю на целое.*/

if((array = (int *)shmat(shmid, NULL, 0)) == (int *)(-1)){

printf("Can't attach shared memory\n");

exit(-1);

}

/* В зависимости от значения флага new либо

инициализируем массив, либо увеличиваем

соответствующие счетчики */

if(new){

array[0] = 1;

array[1] = 0;

array[2] = 1;

} else {

array[0] += 1;

array[2] += 1;

}

/* Печатаем новые значения счетчиков, удаляем

разделяемую память из адресного пространства

текущего процесса и завершаем работу */

printf("Program 1 was spawn %d times,

program 2 - %d times, total - %d times\n",

array[0], array[1], array[2]);

if(shmdt(array) < 0){

printf("Can't detach shared memory\n");

exit(-1);

}

return 0;

}




Содержание  Назад  Вперед